entc/gen: change neighbors-with check to use sqlgraph

Reviewed By: alexsn

Differential Revision: D18729648

fbshipit-source-id: 23eb95bdb0c34c811621a819be6581e1e6fcb474
This commit is contained in:
Ariel Mashraki
2019-12-01 02:05:31 -08:00
committed by Facebook Github Bot
parent f98dbbc440
commit 1a73b8cf55
15 changed files with 334 additions and 337 deletions

View File

@@ -80,51 +80,22 @@ in the LICENSE file in the root directory of this source tree.
{{ define "dialect/sql/predicate/edge/haswith" -}}
{{- $e := $.Scope.Edge -}}
func(s *sql.Selector) {
{{- if $e.M2M }}
{{ $i := 1 }}{{ $j := 0 }}{{- if $e.IsInverse }}{{ $i = 0 }}{{ $j = 1 }}{{ end -}}
builder := sql.Dialect(s.Dialect())
t1 := s.Table()
t2 := builder.Table(
{{- if ne $.Table $e.Type.Table -}}
{{ $e.InverseTableConstant }}
step := sql.NewStep(
sql.From(Table, {{ $.ID.Constant }}),
sql.To({{ if ne $.Table $e.Type.Table }}{{ $e.InverseTableConstant }}{{ else }}Table{{ end }}, {{ $.ID.Constant }}),
sql.Edge(sql.{{ $e.Rel.Type }}, {{ $e.IsInverse }}, {{ $e.TableConstant }},
{{- if $e.M2M -}}
{{ $e.PKConstant }}...
{{- else -}}
Table
{{ $e.ColumnConstant }}
{{- end -}}
)
t3 := builder.Table({{ $e.TableConstant }})
t4 := builder.Select(t3.C({{ $e.PKConstant }}[{{ $j }}])).
From(t3).
Join(t2).
On(t3.C({{ $e.PKConstant }}[{{ $i }}]), t2.C({{ $e.Type.ID.Constant }}))
t5 := builder.Select().From(t2)
),
)
sql.HasNeighborsWith(s, step, func(s *sql.Selector) {
for _, p := range preds {
p(t5)
p(s)
}
t4.FromSelect(t5)
s.Where(sql.In(t1.C({{ $.ID.Constant }}), t4))
{{- else if or $e.M2O (and $e.O2O $e.IsInverse) }}{{/* M2O || (O2O with inverse edge) */}}
builder := sql.Dialect(s.Dialect())
t1 := s.Table()
t2 := builder.Select({{ $e.Type.ID.Constant }}).From(builder.Table(
{{- if ne $.Table $e.Type.Table -}}
{{ $e.InverseTableConstant }}
{{- else -}}
{{ $e.TableConstant }}
{{- end -}}
))
for _, p := range preds {
p(t2)
}
s.Where(sql.In(t1.C({{ $e.ColumnConstant }}), t2))
{{- else }}{{/* O2M || (O2O with assoc edge) */}}
builder := sql.Dialect(s.Dialect())
t1 := s.Table()
t2 := builder.Select({{ $e.ColumnConstant }}).From(builder.Table({{ $e.TableConstant }}))
for _, p := range preds {
p(t2)
}
s.Where(sql.In(t1.C({{ $.ID.Constant }}), t2))
{{- end }}
})
}
{{- end }}