Fix missing index kind information on ID.

This commit is contained in:
Asdine El Hrychy
2018-01-06 15:43:59 +01:00
parent fa32729dda
commit 68fc73b635
3 changed files with 23 additions and 4 deletions

View File

@@ -115,6 +115,7 @@ func extractField(value *reflect.Value, field *reflect.StructField, m *structCon
switch tag { switch tag {
case "id": case "id":
f.IsID = true f.IsID = true
f.Index = tagUniqueIdx
case tagUniqueIdx, tagIdx: case tagUniqueIdx, tagIdx:
f.Index = tag f.Index = tag
case tagInline: case tagInline:
@@ -163,6 +164,7 @@ func extractField(value *reflect.Value, field *reflect.StructField, m *structCon
if m.ID == nil && field.Name == "ID" { if m.ID == nil && field.Name == "ID" {
if f == nil { if f == nil {
f = &fieldConfig{ f = &fieldConfig{
Index: tagUniqueIdx,
Name: field.Name, Name: field.Name,
IsZero: isZero(value), IsZero: isZero(value),
IsInteger: isInteger(value), IsInteger: isInteger(value),

View File

@@ -45,7 +45,7 @@ func TestExtractUniqueTags(t *testing.T) {
require.False(t, infos.ID.IsZero) require.False(t, infos.ID.IsZero)
require.Equal(t, "ClassicUnique", infos.Name) require.Equal(t, "ClassicUnique", infos.Name)
require.Len(t, allByType(infos, "index"), 0) 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) { func TestExtractIndexTags(t *testing.T) {
@@ -58,7 +58,7 @@ func TestExtractIndexTags(t *testing.T) {
require.False(t, infos.ID.IsZero) require.False(t, infos.ID.IsZero)
require.Equal(t, "ClassicIndex", infos.Name) require.Equal(t, "ClassicIndex", infos.Name)
require.Len(t, allByType(infos, "index"), 5) 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) { func TestExtractInlineWithIndex(t *testing.T) {
@@ -70,7 +70,7 @@ func TestExtractInlineWithIndex(t *testing.T) {
require.NotNil(t, infos.ID) require.NotNil(t, infos.ID)
require.Equal(t, "ClassicInline", infos.Name) require.Equal(t, "ClassicInline", infos.Name)
require.Len(t, allByType(infos, "index"), 3) 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) { func TestExtractMultipleTags(t *testing.T) {
@@ -90,7 +90,7 @@ func TestExtractMultipleTags(t *testing.T) {
require.NotNil(t, infos.ID) require.NotNil(t, infos.ID)
require.Equal(t, "User", infos.Name) require.Equal(t, "User", infos.Name)
require.Len(t, allByType(infos, "index"), 2) 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.True(t, infos.Fields["Age"].Increment)
require.Equal(t, int64(1), infos.Fields["Age"].IncrementStart) require.Equal(t, int64(1), infos.Fields["Age"].IncrementStart)

View File

@@ -685,3 +685,20 @@ func TestPrefix(t *testing.T) {
err = db.Prefix("Group", "group3", &users) err = db.Prefix("Group", "group3", &users)
require.Equal(t, ErrNotFound, err) 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)
}