Skip to content

Commit

Permalink
fix(storage): make Query show Prefix consistently (#2661)
Browse files Browse the repository at this point in the history
A Query with SetAttrSelection currently hides Prefix results,
which are returned otherwise. This is a fix to make sure
Prefixes are not inadvertently filtered.

Fixes #1763.
  • Loading branch information
tritone committed Sep 10, 2020
1 parent 1b152af commit 9183fc0
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 3 deletions.
41 changes: 39 additions & 2 deletions storage/integration_test.go
Expand Up @@ -686,6 +686,43 @@ func TestIntegration_Objects(t *testing.T) {
testObjectsIterateSelectedAttrs(t, bkt, objects)
testObjectsIterateAllSelectedAttrs(t, bkt, objects)
testObjectIteratorWithOffset(t, bkt, objects)
t.Run("testObjectsIterateSelectedAttrsDelimiter", func(t *testing.T) {
query := &Query{Prefix: "", Delimiter: "/"}
if err := query.SetAttrSelection([]string{"Name"}); err != nil {
t.Fatalf("selecting query attrs: %v", err)
}

var gotNames []string
var gotPrefixes []string
it := bkt.Objects(context.Background(), query)
for {
attrs, err := it.Next()
if err == iterator.Done {
break
}
if err != nil {
t.Fatalf("iterator.Next: %v", err)
}
if attrs.Name != "" {
gotNames = append(gotNames, attrs.Name)
} else if attrs.Prefix != "" {
gotPrefixes = append(gotPrefixes, attrs.Prefix)
}

if attrs.Bucket != "" {
t.Errorf("Bucket field not selected, want empty, got = %v", attrs.Bucket)
}
}

sortedNames := []string{"obj1", "obj2"}
if !cmp.Equal(sortedNames, gotNames) {
t.Errorf("names = %v, want %v", gotNames, sortedNames)
}
sortedPrefixes := []string{"obj/"}
if !cmp.Equal(sortedPrefixes, gotPrefixes) {
t.Errorf("prefixes = %v, want %v", gotPrefixes, sortedPrefixes)
}
})

// Test Reader.
for _, obj := range objects {
Expand Down Expand Up @@ -1136,7 +1173,7 @@ func testObjectsIterateSelectedAttrs(t *testing.T, bkt *BucketHandle, objects []
break
}
if err != nil {
log.Fatal(err)
t.Fatalf("iterator.Next: %v", err)
}
gotNames = append(gotNames, attrs.Name)

Expand Down Expand Up @@ -1177,7 +1214,7 @@ func testObjectsIterateAllSelectedAttrs(t *testing.T, bkt *BucketHandle, objects
break
}
if err != nil {
log.Fatal(err)
t.Fatalf("iterator.Next: %v", err)
}
count++
}
Expand Down
2 changes: 1 addition & 1 deletion storage/storage.go
Expand Up @@ -1386,7 +1386,7 @@ func (q *Query) SetAttrSelection(attrs []string) error {

if len(fieldSet) > 0 {
var b bytes.Buffer
b.WriteString("items(")
b.WriteString("prefixes,items(")
first := true
for field := range fieldSet {
if !first {
Expand Down

0 comments on commit 9183fc0

Please sign in to comment.