1
0
Fork 0

EQ results in assoc mode will include nil rows

master
Philip O'Toole 1 year ago
parent f5d8df9e2e
commit f53cb833bb

@ -40,6 +40,14 @@ type AssociativeRows struct {
Time float64 `json:"time,omitempty"` Time float64 `json:"time,omitempty"`
} }
// ResultWithRows represents the outcome of an operation that changes rows, but also
// includes an nil rows object, so clients can distinguish between a query and execute
// result.
type ResultWithRows struct {
Result
Rows []map[string]interface{} `json:"rows"`
}
// NewResultRowsFromExecuteQueryResponse returns an API object from an // NewResultRowsFromExecuteQueryResponse returns an API object from an
// ExecuteQueryResponse. // ExecuteQueryResponse.
func NewResultRowsFromExecuteQueryResponse(e *command.ExecuteQueryResponse) (interface{}, error) { func NewResultRowsFromExecuteQueryResponse(e *command.ExecuteQueryResponse) (interface{}, error) {
@ -52,12 +60,18 @@ func NewResultRowsFromExecuteQueryResponse(e *command.ExecuteQueryResponse) (int
"error": err, "error": err,
}, nil }, nil
} }
return nil, errors.New("no ExecuteResult or QueryRows") return nil, errors.New("no ExecuteResult, QueryRows, or Error")
} }
func NewAssociativeResultRowsFromExecuteQueryResponse(e *command.ExecuteQueryResponse) (interface{}, error) { func NewAssociativeResultRowsFromExecuteQueryResponse(e *command.ExecuteQueryResponse) (interface{}, error) {
if er := e.GetE(); er != nil { if er := e.GetE(); er != nil {
return NewResultFromExecuteResult(er) r, err := NewResultFromExecuteResult(er)
if err != nil {
return nil, err
}
return &ResultWithRows{
Result: *r,
}, nil
} else if qr := e.GetQ(); qr != nil { } else if qr := e.GetQ(); qr != nil {
return NewAssociativeRowsFromQueryRows(qr) return NewAssociativeRowsFromQueryRows(qr)
} else if err := e.GetError(); err != "" { } else if err := e.GetError(); err != "" {
@ -65,7 +79,7 @@ func NewAssociativeResultRowsFromExecuteQueryResponse(e *command.ExecuteQueryRes
"error": err, "error": err,
}, nil }, nil
} }
return nil, errors.New("no ExecuteResult or QueryRows") return nil, errors.New("no ExecuteResult, QueryRows, or Error")
} }
// NewResultFromExecuteResult returns an API Result object from an ExecuteResult. // NewResultFromExecuteResult returns an API Result object from an ExecuteResult.

@ -481,7 +481,7 @@ func Test_MarshalExecuteQueryAssociativeResponse(t *testing.T) {
}, },
}, },
}, },
expected: `[{"last_insert_id":123,"rows_affected":456}]`, expected: `[{"last_insert_id":123,"rows_affected":456,"rows":null}]`,
}, },
{ {
name: "Test with QueryRows", name: "Test with QueryRows",
@ -554,7 +554,7 @@ func Test_MarshalExecuteQueryAssociativeResponse(t *testing.T) {
}, },
}, },
}, },
expected: `[{"last_insert_id":123,"rows_affected":456},{"error":"unique constraint failed"},{"types":{"column1":"int","column2":"text"},"rows":[{"column1":456,"column2":"declan"}]}]`, expected: `[{"last_insert_id":123,"rows_affected":456,"rows":null},{"error":"unique constraint failed"},{"types":{"column1":"int","column2":"text"},"rows":[{"column1":456,"column2":"declan"}]}]`,
}, },
} }

Loading…
Cancel
Save