diff options
Diffstat (limited to 'vendor/github.com/uptrace/bun/schema/table.go')
-rw-r--r-- | vendor/github.com/uptrace/bun/schema/table.go | 37 |
1 files changed, 7 insertions, 30 deletions
diff --git a/vendor/github.com/uptrace/bun/schema/table.go b/vendor/github.com/uptrace/bun/schema/table.go index cd0ff20b2..9eb7d1bfe 100644 --- a/vendor/github.com/uptrace/bun/schema/table.go +++ b/vendor/github.com/uptrace/bun/schema/table.go @@ -4,7 +4,6 @@ import ( "database/sql" "fmt" "reflect" - "strconv" "strings" "sync" "time" @@ -807,38 +806,18 @@ func (t *Table) m2mRelation(field *Field) *Relation { return rel } -type seenKey struct { - Table reflect.Type - FieldIndex string -} - -type seenMap map[seenKey]struct{} - -func NewSeenKey(table reflect.Type, fieldIndex []int) (key seenKey) { - key.Table = table - for _, index := range fieldIndex { - key.FieldIndex += strconv.Itoa(index) + "-" - } - return key -} - -func (s seenMap) Clone() seenMap { - t := make(seenMap) - for k, v := range s { - t[k] = v +func (t *Table) inlineFields(field *Field, seen map[reflect.Type]struct{}) { + if seen == nil { + seen = map[reflect.Type]struct{}{t.Type: {}} } - return t -} -func (t *Table) inlineFields(field *Field, seen seenMap) { - if seen == nil { - seen = make(seenMap) + if _, ok := seen[field.IndirectType]; ok { + return } + seen[field.IndirectType] = struct{}{} joinTable := t.dialect.Tables().Ref(field.IndirectType) for _, f := range joinTable.allFields { - key := NewSeenKey(joinTable.Type, f.Index) - f = f.Clone() f.GoName = field.GoName + "_" + f.GoName f.Name = field.Name + "__" + f.Name @@ -855,9 +834,7 @@ func (t *Table) inlineFields(field *Field, seen seenMap) { continue } - if _, ok := seen[key]; !ok { - seen = seen.Clone() - seen[key] = struct{}{} + if _, ok := seen[f.IndirectType]; !ok { t.inlineFields(f, seen) } } |