1
0
Fork 0

Fix parsing of nil named parameter values

master
Philip O'Toole 2 years ago
parent 2826417e2f
commit c219027336

@ -132,7 +132,10 @@ func makeParameter(name string, i interface{}) (*command.Parameter, error) {
Name: name,
}, nil
case nil:
return nil, nil
return &command.Parameter{
Value: nil,
Name: name,
}, nil
}
return nil, ErrUnsupportedType
}

@ -3,6 +3,7 @@ package http
import (
"encoding/json"
"fmt"
"reflect"
"testing"
)
@ -160,6 +161,74 @@ func Test_SingleNamedParameterizedRequest(t *testing.T) {
if len(stmts[0].Parameters) != 2 {
t.Fatalf("incorrect number of parameters returned: %d", len(stmts[0].Parameters))
}
// build a map of the parameters for easier comparison
params := make(map[string]interface{})
for _, p := range stmts[0].Parameters {
// if the name is "bar" then get an int64, or if it's "qux" then get a string,
// otherwise fail the test
if p.GetName() == "bar" {
params[p.GetName()] = p.GetD()
} else if p.GetName() == "qux" {
params[p.GetName()] = p.GetS()
} else {
t.Fatalf("unexpected parameter name: %s", p.GetName())
}
}
exp := map[string]interface{}{
"bar": float64(1),
"qux": "some string",
}
if !reflect.DeepEqual(exp, params) {
t.Fatalf("incorrect parameters, exp %s, got %s", exp, params)
}
}
func Test_SingleNamedParameterizedRequestNils(t *testing.T) {
s := "SELECT * FROM foo WHERE bar=:bar AND qux=:qux"
b := []byte(fmt.Sprintf(`[["%s", %s]]`, s, mustJSONMarshal(map[string]interface{}{"bar": 1, "qux": "some string", "baz": nil})))
stmts, err := ParseRequest(b)
if err != nil {
t.Fatalf("failed to parse request: %s", err.Error())
}
if len(stmts) != 1 {
t.Fatalf("incorrect number of statements returned: %d", len(stmts))
}
if stmts[0].Sql != s {
t.Fatalf("incorrect statement parsed, exp %s, got %s", s, stmts[0].Sql)
}
if len(stmts[0].Parameters) != 3 {
t.Fatalf("incorrect number of parameters returned: %d", len(stmts[0].Parameters))
}
// build a map of the parameters for easier comparison
params := make(map[string]interface{})
for _, p := range stmts[0].Parameters {
if p.GetName() == "bar" {
params[p.GetName()] = p.GetD()
} else if p.GetName() == "qux" {
params[p.GetName()] = p.GetS()
} else if p.GetName() == "baz" {
params[p.GetName()] = p.GetValue()
} else {
t.Fatalf("unexpected parameter name: %s", p.GetName())
}
}
exp := map[string]interface{}{
"bar": float64(1),
"qux": "some string",
"baz": nil,
}
if !reflect.DeepEqual(exp, params) {
t.Fatalf("incorrect parameters, exp %s, got %s", exp, params)
}
}
func Test_SingleParameterizedRequestNoParams(t *testing.T) {

Loading…
Cancel
Save