summaryrefslogtreecommitdiff
path: root/vendor/github.com/uptrace/bun/schema/table.go
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2023-09-11 15:16:52 +0200
committerLibravatar GitHub <noreply@github.com>2023-09-11 15:16:52 +0200
commit7011f57b09fc03bde9d48fef191e904110c09c4b (patch)
tree1118192d6c8d49715d2293ee19c79e50b89de64e /vendor/github.com/uptrace/bun/schema/table.go
parent[chore]: Bump golang.org/x/net from 0.14.0 to 0.15.0 (#2193) (diff)
downloadgotosocial-7011f57b09fc03bde9d48fef191e904110c09c4b.tar.xz
[chore] bump bun v1.1.14 -> v1.1.15 (#2195)
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, 30 insertions, 7 deletions
diff --git a/vendor/github.com/uptrace/bun/schema/table.go b/vendor/github.com/uptrace/bun/schema/table.go
index 9eb7d1bfe..cd0ff20b2 100644
--- a/vendor/github.com/uptrace/bun/schema/table.go
+++ b/vendor/github.com/uptrace/bun/schema/table.go
@@ -4,6 +4,7 @@ import (
"database/sql"
"fmt"
"reflect"
+ "strconv"
"strings"
"sync"
"time"
@@ -806,18 +807,38 @@ func (t *Table) m2mRelation(field *Field) *Relation {
return rel
}
-func (t *Table) inlineFields(field *Field, seen map[reflect.Type]struct{}) {
- if seen == nil {
- seen = map[reflect.Type]struct{}{t.Type: {}}
+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
+}
- if _, ok := seen[field.IndirectType]; ok {
- return
+func (s seenMap) Clone() seenMap {
+ t := make(seenMap)
+ for k, v := range s {
+ t[k] = v
+ }
+ return t
+}
+
+func (t *Table) inlineFields(field *Field, seen seenMap) {
+ if seen == nil {
+ seen = make(seenMap)
}
- 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
@@ -834,7 +855,9 @@ func (t *Table) inlineFields(field *Field, seen map[reflect.Type]struct{}) {
continue
}
- if _, ok := seen[f.IndirectType]; !ok {
+ if _, ok := seen[key]; !ok {
+ seen = seen.Clone()
+ seen[key] = struct{}{}
t.inlineFields(f, seen)
}
}