summaryrefslogtreecommitdiff
path: root/vendor/github.com/uptrace/bun/schema/table.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/uptrace/bun/schema/table.go')
-rw-r--r--vendor/github.com/uptrace/bun/schema/table.go37
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)
}
}