From 908e4518786379fb70ba79f3780d1b0fc3e36a4a Mon Sep 17 00:00:00 2001 From: DvirDukhan Date: Mon, 25 Nov 2019 10:19:10 +0200 Subject: [PATCH 1/2] added support for string array --- client_test.go | 2 +- utils.go | 19 ++++++++----------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/client_test.go b/client_test.go index 97a5b13..7436fcb 100644 --- a/client_test.go +++ b/client_test.go @@ -259,7 +259,7 @@ func TestPath(t *testing.T) { func TestParameterizedQuery(t *testing.T) { createGraph() - params := []interface{}{1, 2.3, "str", true, false, nil, []interface {}{0, 1, 2}} + params := []interface{}{1, 2.3, "str", true, false, nil, []interface {}{0, 1, 2}, []interface {}{"0", "1", "2"}} q := "RETURN $param" params_map := make(map[string]interface{}) for index, param := range params { diff --git a/utils.go b/utils.go index c0ac245..2c43f79 100644 --- a/utils.go +++ b/utils.go @@ -3,18 +3,17 @@ package redisgraph import ( "crypto/rand" "fmt" - "reflect" "strings" ) // go array to string is [1 2 3] for [1, 2, 3] array // cypher expects comma separated array func arrayToString(arr interface{}) interface{} { - v := reflect.ValueOf(arr) - var arrayLength = v.Len() + v := arr.([]interface{}) + var arrayLength = len(v) strArray := []string{} for i := 0; i < arrayLength; i++ { - strArray = append(strArray, fmt.Sprintf("%v", ToString(v.Index(i)))) + strArray = append(strArray, fmt.Sprintf("%v", ToString(v[i]))) } return "[" + strings.Join(strArray[:], ",") + "]" } @@ -23,10 +22,10 @@ func ToString(i interface{}) interface{} { if(i == nil) { return "null" } - v := reflect.ValueOf(i) - switch reflect.TypeOf(i).Kind() { - case reflect.String: - s := v.String() + + switch i.(type) { + case string: + s := i.(string) if len(s) == 0 { return "\"\"" } @@ -37,9 +36,7 @@ func ToString(i interface{}) interface{} { s += "\"" } return s - case reflect.Slice: - return arrayToString(i) - case reflect.Array: + case []interface {} : return arrayToString(i) default: return i From d1279e7a2eb76672637bb3cd9404e54c2df0f7fc Mon Sep 17 00:00:00 2001 From: DvirDukhan Date: Mon, 25 Nov 2019 11:35:54 +0200 Subject: [PATCH 2/2] changed toString function --- graph.go | 2 +- utils.go | 36 +++++++++++++++++------------------- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/graph.go b/graph.go index 7890c94..444fc2d 100644 --- a/graph.go +++ b/graph.go @@ -190,7 +190,7 @@ func (g *Graph) CallProcedure(procedure string, yield []string, args ...interfac tmp := make([]string, 0, len(args)) for arg := range args { - tmp = append(tmp, ToString(arg).(string)) + tmp = append(tmp, ToString(arg)) } q += fmt.Sprintf("%s)", strings.Join(tmp, ",")) diff --git a/utils.go b/utils.go index 2c43f79..5645d01 100644 --- a/utils.go +++ b/utils.go @@ -4,21 +4,21 @@ import ( "crypto/rand" "fmt" "strings" + "strconv" ) // go array to string is [1 2 3] for [1, 2, 3] array // cypher expects comma separated array -func arrayToString(arr interface{}) interface{} { - v := arr.([]interface{}) - var arrayLength = len(v) +func arrayToString(arr []interface{}) string { + var arrayLength = len(arr) strArray := []string{} for i := 0; i < arrayLength; i++ { - strArray = append(strArray, fmt.Sprintf("%v", ToString(v[i]))) + strArray = append(strArray, ToString(arr[i])) } - return "[" + strings.Join(strArray[:], ",") + "]" + return "[" + strings.Join(strArray, ",") + "]" } -func ToString(i interface{}) interface{} { +func ToString(i interface{}) string { if(i == nil) { return "null" } @@ -26,20 +26,18 @@ func ToString(i interface{}) interface{} { switch i.(type) { case string: s := i.(string) - if len(s) == 0 { - return "\"\"" - } - if s[0] != '"' { - s = "\"" + s - } - if s[len(s)-1] != '"' { - s += "\"" - } - return s - case []interface {} : - return arrayToString(i) + return strconv.Quote(s) + case int: + return strconv.Itoa(i.(int)) + case float64: + return strconv.FormatFloat(i.(float64), 'f', -1, 64) + case bool: + return strconv.FormatBool(i.(bool)) + case []interface {}: + arr := i.([]interface{}) + return arrayToString(arr) default: - return i + panic("Unrecognized type to convert to string") } }