diff --git a/extract.go b/extract.go index 57d0561..6108cd8 100644 --- a/extract.go +++ b/extract.go @@ -115,6 +115,7 @@ func extractField(value *reflect.Value, field *reflect.StructField, m *structCon switch tag { case "id": f.IsID = true + f.Index = tagUniqueIdx case tagUniqueIdx, tagIdx: f.Index = tag case tagInline: @@ -163,6 +164,7 @@ func extractField(value *reflect.Value, field *reflect.StructField, m *structCon if m.ID == nil && field.Name == "ID" { if f == nil { f = &fieldConfig{ + Index: tagUniqueIdx, Name: field.Name, IsZero: isZero(value), IsInteger: isInteger(value), diff --git a/extract_test.go b/extract_test.go index ed8b119..1f6dcb0 100644 --- a/extract_test.go +++ b/extract_test.go @@ -45,7 +45,7 @@ func TestExtractUniqueTags(t *testing.T) { require.False(t, infos.ID.IsZero) require.Equal(t, "ClassicUnique", infos.Name) require.Len(t, allByType(infos, "index"), 0) - require.Len(t, allByType(infos, "unique"), 4) + require.Len(t, allByType(infos, "unique"), 5) } func TestExtractIndexTags(t *testing.T) { @@ -58,7 +58,7 @@ func TestExtractIndexTags(t *testing.T) { require.False(t, infos.ID.IsZero) require.Equal(t, "ClassicIndex", infos.Name) require.Len(t, allByType(infos, "index"), 5) - require.Len(t, allByType(infos, "unique"), 0) + require.Len(t, allByType(infos, "unique"), 1) } func TestExtractInlineWithIndex(t *testing.T) { @@ -70,7 +70,7 @@ func TestExtractInlineWithIndex(t *testing.T) { require.NotNil(t, infos.ID) require.Equal(t, "ClassicInline", infos.Name) require.Len(t, allByType(infos, "index"), 3) - require.Len(t, allByType(infos, "unique"), 2) + require.Len(t, allByType(infos, "unique"), 3) } func TestExtractMultipleTags(t *testing.T) { @@ -90,7 +90,7 @@ func TestExtractMultipleTags(t *testing.T) { require.NotNil(t, infos.ID) require.Equal(t, "User", infos.Name) require.Len(t, allByType(infos, "index"), 2) - require.Len(t, allByType(infos, "unique"), 1) + require.Len(t, allByType(infos, "unique"), 2) require.True(t, infos.Fields["Age"].Increment) require.Equal(t, int64(1), infos.Fields["Age"].IncrementStart) diff --git a/finder_test.go b/finder_test.go index daec14a..c5a1c57 100644 --- a/finder_test.go +++ b/finder_test.go @@ -685,3 +685,20 @@ func TestPrefix(t *testing.T) { err = db.Prefix("Group", "group3", &users) require.Equal(t, ErrNotFound, err) } + +func TestPrefixWithID(t *testing.T) { + db, cleanup := createDB(t) + defer cleanup() + + type User struct { + ID string + } + + require.NoError(t, db.Save(&User{ID: "1"})) + require.NoError(t, db.Save(&User{ID: "10"})) + + var users []User + + require.NoError(t, db.Prefix("ID", "1", &users)) + require.Len(t, users, 2) +}