Skip to content

Commit 42f4766

Browse files
author
DvirDukhan
authored
Merge pull request #46 from RedisGraph/array_support
added array support
2 parents 3f3167d + 4b9ba50 commit 42f4766

File tree

6 files changed

+220
-84
lines changed

6 files changed

+220
-84
lines changed

src/main/java/com/redislabs/redisgraph/ResultSet.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,6 @@
77
*/
88
public interface ResultSet extends Iterator<Record> {
99

10-
enum ResultSetScalarTypes {
11-
PROPERTY_UNKNOWN,
12-
PROPERTY_NULL,
13-
PROPERTY_STRING,
14-
PROPERTY_INTEGER,
15-
PROPERTY_BOOLEAN,
16-
PROPERTY_DOUBLE,
17-
}
18-
1910
int size();
2011

2112
Statistics getStatistics();

src/main/java/com/redislabs/redisgraph/graph_entities/GraphEntity.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package com.redislabs.redisgraph.graph_entities;
22

3-
4-
import com.redislabs.redisgraph.ResultSet.ResultSetScalarTypes;
5-
63
import java.util.*;
74

85

@@ -42,12 +39,11 @@ public void setId(int id) {
4239
/**
4340
* Adds a property to the entity, by composing name, type and value to a property object
4441
* @param name
45-
* @param type
4642
* @param value
4743
*/
48-
public void addProperty(String name, ResultSetScalarTypes type, Object value){
44+
public void addProperty(String name, Object value){
4945

50-
addProperty(new Property(name, type, value));
46+
addProperty(new Property(name, value));
5147

5248
}
5349

src/main/java/com/redislabs/redisgraph/graph_entities/Property.java

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
/**
88
* A Graph entity property. Has a name, type, and value
99
*/
10-
public class Property {
10+
public class Property <T> {
1111

1212
//members
1313
private String name;
14-
private ResultSet.ResultSetScalarTypes type;
15-
private Object value;
14+
15+
private T value;
1616

1717

1818
/**
@@ -26,15 +26,14 @@ public Property() {
2626
* Parameterized constructor
2727
*
2828
* @param name
29-
* @param type
3029
* @param value
3130
*/
32-
public Property(String name, ResultSet.ResultSetScalarTypes type, Object value) {
31+
public Property(String name, T value) {
3332
this.name = name;
34-
this.type = type;
3533
this.value = value;
3634
}
3735

36+
3837
//getters & setters
3938

4039
/**
@@ -51,33 +50,19 @@ public void setName(String name) {
5150
this.name = name;
5251
}
5352

54-
/**
55-
* @return property type
56-
*/
57-
public ResultSet.ResultSetScalarTypes getType() {
58-
return type;
59-
}
60-
61-
/**
62-
* @param type property type to be set
63-
*/
64-
public void setType(ResultSet.ResultSetScalarTypes type) {
65-
this.type = type;
66-
}
67-
6853

6954
/**
7055
* @return property value
7156
*/
72-
public Object getValue() {
57+
public T getValue() {
7358
return value;
7459
}
7560

7661

7762
/**
7863
* @param value property value to be set
7964
*/
80-
public void setValue(Object value) {
65+
public void setValue(T value) {
8166
this.value = value;
8267
}
8368

@@ -88,13 +73,12 @@ public boolean equals(Object o) {
8873
if (!(o instanceof Property)) return false;
8974
Property property = (Property) o;
9075
return Objects.equals(name, property.name) &&
91-
type == property.type &&
9276
Objects.equals(value, property.value);
9377
}
9478

9579
@Override
9680
public int hashCode() {
97-
return Objects.hash(name, type, value);
81+
return Objects.hash(name, value);
9882
}
9983

10084
/**
@@ -105,7 +89,6 @@ public int hashCode() {
10589
public String toString() {
10690
final StringBuilder sb = new StringBuilder("Property{");
10791
sb.append("name='").append(name).append('\'');
108-
sb.append(", type=").append(type);
10992
sb.append(", value=").append(value);
11093
sb.append('}');
11194
return sb.toString();

src/main/java/com/redislabs/redisgraph/impl/resultset/ResultSetImpl.java

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package com.redislabs.redisgraph.impl.resultset;
22

3-
import com.redislabs.redisgraph.*;
3+
import com.redislabs.redisgraph.Header;
4+
import com.redislabs.redisgraph.Record;
5+
import com.redislabs.redisgraph.RedisGraph;
6+
import com.redislabs.redisgraph.ResultSet;
7+
import com.redislabs.redisgraph.Statistics;
48
import com.redislabs.redisgraph.graph_entities.Edge;
59
import com.redislabs.redisgraph.graph_entities.GraphEntity;
610
import com.redislabs.redisgraph.graph_entities.Node;
@@ -199,7 +203,6 @@ private void deserializeGraphEntityProperties(GraphEntity entity, List<List<Obje
199203

200204
//trimmed for getting to value using deserializeScalar
201205
List<Object> propertyScalar = rawProperty.subList(1, rawProperty.size());
202-
property.setType(getScalarTypeFromObject(propertyScalar.get(0)));
203206
property.setValue(deserializeScalar(propertyScalar));
204207

205208
entity.addProperty(property);
@@ -213,33 +216,49 @@ private void deserializeGraphEntityProperties(GraphEntity entity, List<List<Obje
213216
* @return value of the specific scalar type
214217
*/
215218
private Object deserializeScalar(List<Object> rawScalarData) {
216-
ResultSetScalarTypes type = getScalarTypeFromObject(rawScalarData.get(0));
219+
ResultSetScalarTypes type = getValueTypeFromObject(rawScalarData.get(0));
220+
217221
Object obj = rawScalarData.get(1);
218222
switch (type) {
219-
case PROPERTY_NULL:
223+
case VALUE_NULL:
220224
return null;
221-
case PROPERTY_BOOLEAN:
225+
case VALUE_BOOLEAN:
222226
return Boolean.parseBoolean(SafeEncoder.encode((byte[]) obj));
223-
case PROPERTY_DOUBLE:
227+
case VALUE_DOUBLE:
224228
return Double.parseDouble(SafeEncoder.encode((byte[]) obj));
225-
case PROPERTY_INTEGER:
229+
case VALUE_INTEGER:
226230
return ((Long) obj).intValue();
227-
case PROPERTY_STRING:
231+
case VALUE_STRING:
228232
return SafeEncoder.encode((byte[]) obj);
229-
case PROPERTY_UNKNOWN:
233+
case VALUE_ARRAY:
234+
return deserializeArray(obj);
235+
case VALUE_NODE:
236+
return deserializeNode((List<Object>) obj);
237+
case VALUE_EDGE:
238+
return deserializeEdge((List<Object>) obj);
239+
case VALUE_UNKNOWN:
230240
default:
231241
return obj;
232242
}
233243
}
234244

245+
private List<Object> deserializeArray(Object rawScalarData) {
246+
List<List<Object>> array = (List<List<Object>>) rawScalarData;
247+
List<Object> res = new ArrayList<>(array.size());
248+
for (List<Object> arrayValue : array) {
249+
res.add(deserializeScalar(arrayValue));
250+
}
251+
return res;
252+
}
253+
235254
/**
236255
* Auxiliary function to retrieve scalar types
237256
*
238257
* @param rawScalarType
239258
* @return scalar type
240259
*/
241-
private ResultSetScalarTypes getScalarTypeFromObject(Object rawScalarType) {
242-
return ResultSetScalarTypes.values()[((Long) rawScalarType).intValue()];
260+
private ResultSetScalarTypes getValueTypeFromObject(Object rawScalarType) {
261+
return ResultSetScalarTypes.getValue(((Long) rawScalarType).intValue());
243262
}
244263

245264
@Override
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.redislabs.redisgraph.impl.resultset;
2+
3+
import redis.clients.jedis.exceptions.JedisDataException;
4+
5+
enum ResultSetScalarTypes {
6+
VALUE_UNKNOWN,
7+
VALUE_NULL,
8+
VALUE_STRING,
9+
VALUE_INTEGER,
10+
VALUE_BOOLEAN,
11+
VALUE_DOUBLE,
12+
VALUE_ARRAY,
13+
VALUE_EDGE,
14+
VALUE_NODE;
15+
16+
17+
static ResultSetScalarTypes[] values = values();
18+
19+
public static ResultSetScalarTypes getValue(int index) {
20+
if (index < 0 || index > values.length) throw new JedisDataException("Unrecognized response type");
21+
return values[index];
22+
}
23+
24+
}

0 commit comments

Comments
 (0)