entc/gen: change neighbors predicate to use sqlgraph

Summary: Pull Request resolved: https://github.com/facebookincubator/ent/pull/204

Reviewed By: alexsn

Differential Revision: D18726911

fbshipit-source-id: 6fe850bb0c0613c3f1c94e8bbcf3f0684dded9a6
This commit is contained in:
Ariel Mashraki
2019-11-27 11:27:05 -08:00
committed by Facebook Github Bot
parent 5fe9fcdc1b
commit f7ce61fc3c
15 changed files with 183 additions and 242 deletions

View File

@@ -62,31 +62,18 @@ in the LICENSE file in the root directory of this source tree.
{{ define "dialect/sql/predicate/edge/has" -}}
{{- $e := $.Scope.Edge -}}
func(s *sql.Selector) {
{{- if $e.M2M }}
t1 := s.Table()
builder := sql.Dialect(s.Dialect())
s.Where(
sql.In(
t1.C({{ $.ID.Constant }}),
builder.Select({{ $e.PKConstant }}[{{ if $e.IsInverse }}1{{ else }}0{{ end }}]).
From(builder.Table({{ $e.TableConstant }})),
),
)
{{- else if or $e.M2O (and $e.O2O $e.IsInverse) }}{{/* M2O || (O2O with inverse edge) */}}
t1 := s.Table()
s.Where(sql.NotNull(t1.C({{ $e.ColumnConstant }})))
{{- else }}{{/* O2M || (O2O with assoc edge) */}}
t1 := s.Table()
builder := sql.Dialect(s.Dialect())
s.Where(
sql.In(
t1.C({{ $.ID.Constant }}),
builder.Select({{ $e.ColumnConstant }}).
From(builder.Table({{ $e.TableConstant }})).
Where(sql.NotNull({{ $e.ColumnConstant }})),
),
)
{{- end }}
step := sql.NewStep(
sql.From(Table, {{ $.ID.Constant }}),
sql.To({{ $e.TableConstant }}, {{ $.ID.Constant }}),
sql.Edge(sql.{{ $e.Rel.Type }}, {{ $e.IsInverse }}, {{ $e.TableConstant }},
{{- if $e.M2M -}}
{{ $e.PKConstant }}...
{{- else -}}
{{ $e.ColumnConstant }}
{{- end -}}
),
)
sql.HasNeighbors(s, step)
}
{{- end }}