diff --git a/entc/gen/template/dialect/sql/feature/namedges.tmpl b/entc/gen/template/dialect/sql/feature/namedges.tmpl index b53e8f6a0..cbb549985 100644 --- a/entc/gen/template/dialect/sql/feature/namedges.tmpl +++ b/entc/gen/template/dialect/sql/feature/namedges.tmpl @@ -99,7 +99,19 @@ in the LICENSE file in the root directory of this source tree. for name, query := range {{ $receiver }}.{{ $e.EagerLoadNamedField }} { if err := {{ $receiver }}.load{{ $e.StructField }}(ctx, query, nodes, func(n *{{ $.Name }}) { n.appendNamed{{ $e.StructField }}(name) }, - func(n *{{ $.Name }}, e *{{ $e.Type.Name }}){ n.appendNamed{{ $e.StructField }}(name, e) }); err != nil { + {{- if and ($.FeatureEnabled "bidiedges") $e.Ref $e.Ref.Unique }} + func(n *{{ $.Name }}, e *{{ $e.Type.Name }}){ + n.appendNamed{{ $e.StructField }}(name, e) + {{- $idx := $e.Ref.Index }} + {{- /* Set only in case this type was not loaded explicitly (without custom options). */}} + if !e.Edges.loadedTypes[{{ $idx }}] { + e.Edges.{{ $e.Ref.StructField }} = n + } + }); err != nil { + {{- else }} + {{- /* Keep it one-liner if there is not inverse-condition. */}} + func(n *{{ $.Name }}, e *{{ $e.Type.Name }}){ n.appendNamed{{ $e.StructField }}(name, e) }); err != nil { + {{- end }} return nil, err } } diff --git a/entc/integration/ent/filetype_query.go b/entc/integration/ent/filetype_query.go index bd8f6f219..fc9ff4482 100644 --- a/entc/integration/ent/filetype_query.go +++ b/entc/integration/ent/filetype_query.go @@ -417,7 +417,12 @@ func (ftq *FileTypeQuery) sqlAll(ctx context.Context, hooks ...queryHook) ([]*Fi for name, query := range ftq.withNamedFiles { if err := ftq.loadFiles(ctx, query, nodes, func(n *FileType) { n.appendNamedFiles(name) }, - func(n *FileType, e *File) { n.appendNamedFiles(name, e) }); err != nil { + func(n *FileType, e *File) { + n.appendNamedFiles(name, e) + if !e.Edges.loadedTypes[1] { + e.Edges.Type = n + } + }); err != nil { return nil, err } } diff --git a/entc/integration/ent/groupinfo_query.go b/entc/integration/ent/groupinfo_query.go index 03f8d5ac2..eb2f3ec50 100644 --- a/entc/integration/ent/groupinfo_query.go +++ b/entc/integration/ent/groupinfo_query.go @@ -417,7 +417,12 @@ func (giq *GroupInfoQuery) sqlAll(ctx context.Context, hooks ...queryHook) ([]*G for name, query := range giq.withNamedGroups { if err := giq.loadGroups(ctx, query, nodes, func(n *GroupInfo) { n.appendNamedGroups(name) }, - func(n *GroupInfo, e *Group) { n.appendNamedGroups(name, e) }); err != nil { + func(n *GroupInfo, e *Group) { + n.appendNamedGroups(name, e) + if !e.Edges.loadedTypes[3] { + e.Edges.Info = n + } + }); err != nil { return nil, err } } diff --git a/entc/integration/ent/user_query.go b/entc/integration/ent/user_query.go index 7dceb4642..bfad263fa 100644 --- a/entc/integration/ent/user_query.go +++ b/entc/integration/ent/user_query.go @@ -880,14 +880,24 @@ func (uq *UserQuery) sqlAll(ctx context.Context, hooks ...queryHook) ([]*User, e for name, query := range uq.withNamedPets { if err := uq.loadPets(ctx, query, nodes, func(n *User) { n.appendNamedPets(name) }, - func(n *User, e *Pet) { n.appendNamedPets(name, e) }); err != nil { + func(n *User, e *Pet) { + n.appendNamedPets(name, e) + if !e.Edges.loadedTypes[1] { + e.Edges.Owner = n + } + }); err != nil { return nil, err } } for name, query := range uq.withNamedFiles { if err := uq.loadFiles(ctx, query, nodes, func(n *User) { n.appendNamedFiles(name) }, - func(n *User, e *File) { n.appendNamedFiles(name, e) }); err != nil { + func(n *User, e *File) { + n.appendNamedFiles(name, e) + if !e.Edges.loadedTypes[0] { + e.Edges.Owner = n + } + }); err != nil { return nil, err } } @@ -922,7 +932,12 @@ func (uq *UserQuery) sqlAll(ctx context.Context, hooks ...queryHook) ([]*User, e for name, query := range uq.withNamedChildren { if err := uq.loadChildren(ctx, query, nodes, func(n *User) { n.appendNamedChildren(name) }, - func(n *User, e *User) { n.appendNamedChildren(name, e) }); err != nil { + func(n *User, e *User) { + n.appendNamedChildren(name, e) + if !e.Edges.loadedTypes[10] { + e.Edges.Parent = n + } + }); err != nil { return nil, err } }