Skip to content

Commit 45f2eab

Browse files
authored
Merge pull request #21 from RedisGraph/parameters_support
added parameters support
2 parents d368e34 + 8db09ea commit 45f2eab

File tree

3 files changed

+35
-0
lines changed

3 files changed

+35
-0
lines changed

client_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,3 +256,19 @@ func TestPath(t *testing.T) {
256256
assert.Equal(t, d.GetProperty("population"), 126800000, "Unexpected property value.")
257257

258258
}
259+
260+
func TestParameterizedQuery(t *testing.T) {
261+
createGraph()
262+
params := []interface{}{1, 2.3, "str", true, false, nil, []interface {}{0, 1, 2}}
263+
q := "RETURN $param"
264+
params_map := make(map[string]interface{})
265+
for index, param := range params {
266+
params_map["param"] = param
267+
res, err := graph.ParameterizedQuery(q, params_map);
268+
if err != nil {
269+
t.Error(err)
270+
}
271+
res.Next()
272+
assert.Equal(t, res.Record().GetByIndex(0), params[index], "Unexpected parameter value")
273+
}
274+
}

graph.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ func (g *Graph) Commit() (*QueryResult, error) {
9999

100100
// Query executes a query against the graph.
101101
func (g *Graph) Query(q string) (*QueryResult, error) {
102+
102103
r, err := g.Conn.Do("GRAPH.QUERY", g.Id, q, "--compact")
103104
if err != nil {
104105
return nil, err
@@ -107,6 +108,13 @@ func (g *Graph) Query(q string) (*QueryResult, error) {
107108
return QueryResultNew(g, r)
108109
}
109110

111+
func (g *Graph) ParameterizedQuery(q string, params map[string]interface{}) (*QueryResult, error) {
112+
if(params != nil){
113+
q = BuildParamsHeader(params) + q
114+
}
115+
return g.Query(q);
116+
}
117+
110118
// Merge pattern
111119
func (g *Graph) Merge(p string) (*QueryResult, error) {
112120
q := fmt.Sprintf("MERGE %s", p)

utils.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ func arrayToString(arr interface{}) interface{} {
2020
}
2121

2222
func ToString(i interface{}) interface{} {
23+
if(i == nil) {
24+
return "null"
25+
}
2326
v := reflect.ValueOf(i)
2427
switch reflect.TypeOf(i).Kind() {
2528
case reflect.String:
@@ -67,3 +70,11 @@ func RandomString(n int) string {
6770
}
6871
return string(output)
6972
}
73+
74+
func BuildParamsHeader(params map[string]interface{}) (string) {
75+
header := "CYPHER "
76+
for key, value := range params {
77+
header += fmt.Sprintf("%s=%v ", key, ToString(value))
78+
}
79+
return header
80+
}

0 commit comments

Comments
 (0)