add error to dynamic query

This commit is contained in:
Don Cote 2020-06-19 13:35:42 -04:00
parent 761abb33fd
commit 3b9fe3f4b0
8 changed files with 63 additions and 55 deletions

View File

@ -96,16 +96,37 @@ func TestClient_IntersectMembersToSegment(t *testing.T) {
func TestClient_ExecuteDynamicQuery(t *testing.T) {
client := getClient(t)
c, err := client.ExecuteDynamicQuery(makeQuery(makeCondition()), false)
resp, err := client.ExecuteDynamicQuery(makeQuery(makeCondition()), false)
if err != nil {
t.Fatalf("Unexpected error: %v", err)
}
if c == nil {
t.Fatal("count is nil")
if resp == nil {
t.Fatal("resp is nil")
}
fmt.Fprintln(os.Stdout, "ExecuteDynamicQuery")
fmt.Fprintln(os.Stdout, *c)
fmt.Fprintln(os.Stdout, *resp)
fmt.Println("")
}
func TestClient_ExecuteDynamicQueryWithError(t *testing.T) {
client := getClient(t)
query := makeQuery(makeCondition())
query.Table = "foobar"
resp, err := client.ExecuteDynamicQuery(query, false)
if err != nil {
t.Fatalf("Unexpected error: %v", err)
}
if resp == nil {
t.Fatal("resp is nil")
}
if resp.Error == "" {
t.Fatal("error should not be nil")
}
fmt.Fprintln(os.Stdout, "ExecuteDynamicQuery")
fmt.Fprintln(os.Stdout, *resp)
fmt.Println("")
}

View File

@ -7,12 +7,12 @@ import (
// Dataset is a set of rules that define attributes over a distinct set of members
type Dataset struct {
Identifier string `mapstructure:"identifier",json:"identifier"`
Name string `mapstructure:"name",json:"name"`
OutputEngine string `mapstructure:"output_engine",json:"output_engine"`
Description string `mapstructure:"description",json:"description"`
Tags []string `mapstructure:"tags",json:"tags"`
Partitions []Partition `mapstructure:"partitions",json:"partitions"`
Identifier string `mapstructure:"identifier" json:"identifier"`
Name string `mapstructure:"name" json:"name"`
OutputEngine string `mapstructure:"output_engine" json:"output_engine"`
Description string `mapstructure:"description" json:"description"`
Tags []string `mapstructure:"tags" json:"tags"`
Partitions []Partition `mapstructure:"partitions" json:"partitions"`
}
// GetDatasetsResponse returns the RPC response
@ -33,12 +33,12 @@ func (c Client) GetDatasets(entityID string, ownerID string) (*GetDatasetsRespon
var response GetDatasetsResponse
result, err := c.CallRPC("RPCService.GetDatasets", input)
rpc, err := c.CallRPC("RPCService.GetDatasets", input)
if err != nil {
return &response, err
}
err = mapstructure.Decode(result, &response)
err = mapstructure.Decode(rpc.Result, &response)
if err != nil {
return &response, errors.Wrap(err, "error decoding into `GetDatasets`")
}

View File

@ -11,6 +11,7 @@ type ExecuteDynamicQueryResponse struct {
Results []interface{} `mapstructure:"results"`
ResultCount int `mapstructure:"result_count"`
CompiledSQL string `mapstructure:"compiled_sql"`
Error string `mapstructure:"error,omitempty"`
}
// ExecuteDynamicQuery returns the query results
@ -21,15 +22,17 @@ func (c Client) ExecuteDynamicQuery(query dynamicquery.Query, debug bool) (*Exec
var response ExecuteDynamicQueryResponse
result, err := c.CallRPC("RPCService.ExecuteDynamicQuery", input)
rpc, err := c.CallRPC("RPCService.ExecuteDynamicQuery", input)
if err != nil {
return &response, err
}
err = mapstructure.Decode(result, &response)
err = mapstructure.Decode(rpc.Result, &response)
if err != nil {
return &response, errors.Wrap(err, "error decoding into `ExecuteDynamicQueryResponse`")
}
response.Error = rpc.Error
return &response, nil
}

16
go.sum
View File

@ -1,20 +1,4 @@
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/mitchellh/mapstructure v1.3.1 h1:cCBH2gTD2K0OtLlv/Y5H01VQCqmlDxz30kS5Y5bqfLA=
github.com/mitchellh/mapstructure v1.3.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

View File

@ -7,14 +7,14 @@ import (
// Partition is a slice of a dataset corresponding to a particular member attribute
type Partition struct {
ID string `mapstructure:"id",json:"id"`
EntityID string `mapstructure:"entity_id",json:"entity_id"`
OwnerID string `mapstructure:"owner_id",json:"owner_id"`
Name string `mapstructure:"name",json:"name"`
IsRanked bool `mapstructure:"is_ranked",json:"is_ranked"`
Cardinality int `mapstructure:"cardinality",json:"cardinality"`
MaxRank int `mapstructure:"max_rank",json:"max_rank"`
MinRank int `mapstructure:"min_rank",json:"min_rank"`
ID string `mapstructure:"id" json:"id"`
EntityID string `mapstructure:"entity_id" json:"entity_id"`
OwnerID string `mapstructure:"owner_id" json:"owner_id"`
Name string `mapstructure:"name" json:"name"`
IsRanked bool `mapstructure:"is_ranked" json:"is_ranked"`
Cardinality int `mapstructure:"cardinality" json:"cardinality"`
MaxRank int `mapstructure:"max_rank" json:"max_rank"`
MinRank int `mapstructure:"min_rank" json:"min_rank"`
}
// GetMemberPartitionsResponse returns the RPC response
@ -31,12 +31,12 @@ func (c Client) GetMemberPartitions(entityID string, memberID string) (*GetMembe
var response GetMemberPartitionsResponse
result, err := c.CallRPC("RPCService.GetMemberPartitions", input)
rpc, err := c.CallRPC("RPCService.GetMemberPartitions", input)
if err != nil {
return &response, err
}
err = mapstructure.Decode(result, &response)
err = mapstructure.Decode(rpc.Result, &response)
if err != nil {
return &response, errors.Wrap(err, "error decoding into `GetMemberPartitions`")
}

View File

@ -7,11 +7,11 @@ import (
// RefreshArgs are used as filters to determine what to refresh
type RefreshArgs struct {
EntityID string `mapstructure:"entity_id",json:"entity_id"`
MetricID string `mapstructure:"metric_id",json:"metric_id"`
DatasetID string `mapstructure:"dataset_id",json:"dataset_id"`
Tags []string `mapstructure:"tags",json:"tags"`
Stage string `mapstructure:"stage",json:"stage"`
EntityID string `mapstructure:"entity_id" json:"entity_id"`
MetricID string `mapstructure:"metric_id" json:"metric_id"`
DatasetID string `mapstructure:"dataset_id" json:"dataset_id"`
Tags []string `mapstructure:"tags" json:"tags"`
Stage string `mapstructure:"stage" json:"stage"`
}
// RefreshResponse returns the RPC response
@ -43,12 +43,12 @@ func (c Client) Refresh(refreshArgs RefreshArgs) (*RefreshResponse, error) {
var response RefreshResponse
result, err := c.CallRPC("RPCService.Refresh", input)
rpc, err := c.CallRPC("RPCService.Refresh", input)
if err != nil {
return &response, err
}
err = mapstructure.Decode(result, &response)
err = mapstructure.Decode(rpc.Result, &response)
if err != nil {
return &response, errors.Wrap(err, "error decoding into `RefreshResponse`")
}
@ -63,12 +63,12 @@ func (c Client) GetRefreshJob(jobID string) (*RefreshResponse, error) {
var response RefreshResponse
result, err := c.CallRPC("RPCService.GetRefreshJob", input)
rpc, err := c.CallRPC("RPCService.GetRefreshJob", input)
if err != nil {
return &response, err
}
err = mapstructure.Decode(result, &response)
err = mapstructure.Decode(rpc.Result, &response)
if err != nil {
return &response, errors.Wrap(err, "error decoding into `GetRefreshJob`")
}

4
rpc.go
View File

@ -25,7 +25,7 @@ type RPCResponse struct {
}
// CallRPC returns a response from the RPC interface
func (c Client) CallRPC(method string, param interface{}) (interface{}, error) {
func (c Client) CallRPC(method string, param interface{}) (*RPCResponse, error) {
params := make([]interface{}, 0)
params = append(params, param)
@ -62,5 +62,5 @@ func (c Client) CallRPC(method string, param interface{}) (interface{}, error) {
return nil, errors.New(fmt.Sprintf("flip rpc responded with non-200 for %s, err: %s", c.RPCURL, rpcResponse.Error))
}
return rpcResponse.Result, nil
return &rpcResponse, nil
}

View File

@ -19,12 +19,12 @@ func (c Client) GetSegmentMembers(condition segment.Condition) (*GetSegmentMembe
var segmentMembers GetSegmentMembersResponse
result, err := c.CallRPC("RPCService.GetSegmentMembers", input)
rpc, err := c.CallRPC("RPCService.GetSegmentMembers", input)
if err != nil {
return &segmentMembers, err
}
err = mapstructure.Decode(result, &segmentMembers)
err = mapstructure.Decode(rpc.Result, &segmentMembers)
if err != nil {
return &segmentMembers, errors.Wrap(err, "error decoding into `GetSegmentMembersResponse`")
}
@ -47,12 +47,12 @@ func (c Client) IntersectMembersToSegment(members []string, condition segment.Co
var intersectResponse IntersectMembersToSegmentResponse
result, err := c.CallRPC("RPCService.IntersectMembersToSegment", input)
rpc, err := c.CallRPC("RPCService.IntersectMembersToSegment", input)
if err != nil {
return &intersectResponse, err
}
err = mapstructure.Decode(result, &intersectResponse)
err = mapstructure.Decode(rpc.Result, &intersectResponse)
if err != nil {
return &intersectResponse, errors.Wrap(err, "error decoding into `IntersectMembersToSegmentResponse`")
}