add field parameter error handling to Distinct

This commit is contained in:
Nia Weiss 2020-10-01 12:08:45 -04:00
parent 11e4bbfc67
commit 415f7d20b8
No known key found for this signature in database
GPG key ID: 895E83409BFDA1BB

View file

@ -1074,14 +1074,16 @@ func (e *executor) executeDistinct(ctx context.Context, qcx *Qcx, index string,
span, ctx := tracing.StartSpanFromContext(ctx, "Executor.executeDistinct")
defer span.Finish()
field := c.Args["field"]
if field == "" {
return SignedRow{}, fmt.Errorf("plugin operation %s(): field required", c.Name)
field, hasField, err := c.StringArg("field")
if err != nil {
return SignedRow{}, errors.Wrap(err, "loading field option in Distinct query")
} else if !hasField {
return SignedRow{}, fmt.Errorf("missing field option in Distinct query")
}
// Execute calls in bulk on each remote node and merge.
mapFn := func(ctx context.Context, shard uint64) (_ interface{}, err error) {
return e.executeDistinctShard(ctx, qcx, index, c, shard)
return e.executeDistinctShard(ctx, qcx, index, field, c, shard)
}
// Merge returned results at coordinating node.
@ -1098,7 +1100,7 @@ func (e *executor) executeDistinct(ctx context.Context, qcx *Qcx, index string,
return SignedRow{}, err
}
other, _ := result.(SignedRow)
other.field = field.(string)
other.field = field
return other, nil
}
@ -1385,11 +1387,15 @@ func (e *executor) executeBitmapCallShard(ctx context.Context, qcx *Qcx, index s
// executeDistinctShard executes a Distinct call on a single shard, yielding
// a SignedRow of the values found.
func (e *executor) executeDistinctShard(ctx context.Context, qcx *Qcx, index string, c *pql.Call, shard uint64) (result SignedRow, err error) {
func (e *executor) executeDistinctShard(ctx context.Context, qcx *Qcx, index string, fieldName string, c *pql.Call, shard uint64) (result SignedRow, err error) {
span, ctx := tracing.StartSpanFromContext(ctx, "Executor.executeDistinctShard")
defer span.Finish()
idx := e.Holder.Index(index)
field := e.Holder.Field(index, fieldName)
if field == nil {
return SignedRow{}, ErrFieldNotFound
}
var filter *Row
var filterBitmap *roaring.Bitmap
@ -1406,13 +1412,6 @@ func (e *executor) executeDistinctShard(ctx context.Context, qcx *Qcx, index str
}
}
fieldName, _ := c.Args["field"].(string)
field := e.Holder.Field(index, fieldName)
if field == nil {
return result, nil
}
bsig := field.bsiGroup(fieldName)
if bsig == nil {
return result, nil