Skip to content

Commit 3430ace

Browse files
authored
Merge pull request #22 from RedisGraph/parameters_support
added support for string array
2 parents 45f2eab + d1279e7 commit 3430ace

File tree

3 files changed

+23
-28
lines changed

3 files changed

+23
-28
lines changed

client_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ func TestPath(t *testing.T) {
259259

260260
func TestParameterizedQuery(t *testing.T) {
261261
createGraph()
262-
params := []interface{}{1, 2.3, "str", true, false, nil, []interface {}{0, 1, 2}}
262+
params := []interface{}{1, 2.3, "str", true, false, nil, []interface {}{0, 1, 2}, []interface {}{"0", "1", "2"}}
263263
q := "RETURN $param"
264264
params_map := make(map[string]interface{})
265265
for index, param := range params {

graph.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ func (g *Graph) CallProcedure(procedure string, yield []string, args ...interfac
190190

191191
tmp := make([]string, 0, len(args))
192192
for arg := range args {
193-
tmp = append(tmp, ToString(arg).(string))
193+
tmp = append(tmp, ToString(arg))
194194
}
195195
q += fmt.Sprintf("%s)", strings.Join(tmp, ","))
196196

utils.go

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,46 +3,41 @@ package redisgraph
33
import (
44
"crypto/rand"
55
"fmt"
6-
"reflect"
76
"strings"
7+
"strconv"
88
)
99

1010
// go array to string is [1 2 3] for [1, 2, 3] array
1111
// cypher expects comma separated array
12-
func arrayToString(arr interface{}) interface{} {
13-
v := reflect.ValueOf(arr)
14-
var arrayLength = v.Len()
12+
func arrayToString(arr []interface{}) string {
13+
var arrayLength = len(arr)
1514
strArray := []string{}
1615
for i := 0; i < arrayLength; i++ {
17-
strArray = append(strArray, fmt.Sprintf("%v", ToString(v.Index(i))))
16+
strArray = append(strArray, ToString(arr[i]))
1817
}
19-
return "[" + strings.Join(strArray[:], ",") + "]"
18+
return "[" + strings.Join(strArray, ",") + "]"
2019
}
2120

22-
func ToString(i interface{}) interface{} {
21+
func ToString(i interface{}) string {
2322
if(i == nil) {
2423
return "null"
2524
}
26-
v := reflect.ValueOf(i)
27-
switch reflect.TypeOf(i).Kind() {
28-
case reflect.String:
29-
s := v.String()
30-
if len(s) == 0 {
31-
return "\"\""
32-
}
33-
if s[0] != '"' {
34-
s = "\"" + s
35-
}
36-
if s[len(s)-1] != '"' {
37-
s += "\""
38-
}
39-
return s
40-
case reflect.Slice:
41-
return arrayToString(i)
42-
case reflect.Array:
43-
return arrayToString(i)
25+
26+
switch i.(type) {
27+
case string:
28+
s := i.(string)
29+
return strconv.Quote(s)
30+
case int:
31+
return strconv.Itoa(i.(int))
32+
case float64:
33+
return strconv.FormatFloat(i.(float64), 'f', -1, 64)
34+
case bool:
35+
return strconv.FormatBool(i.(bool))
36+
case []interface {}:
37+
arr := i.([]interface{})
38+
return arrayToString(arr)
4439
default:
45-
return i
40+
panic("Unrecognized type to convert to string")
4641
}
4742
}
4843

0 commit comments

Comments
 (0)