entc/gen: move set-neighbors logic from codegen to sqlgraph

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

Reviewed By: alexsn

Differential Revision: D18644179

fbshipit-source-id: 2f2b0c03811a09c4c11240e5161187afbb2ac553
This commit is contained in:
Ariel Mashraki
2019-11-24 02:43:21 -08:00
committed by Facebook Github Bot
parent 1e49561634
commit c355ed49be
34 changed files with 659 additions and 659 deletions

View File

@@ -88,41 +88,20 @@ func ({{ $receiver }} *{{ $builder }}) sqlQuery() *sql.Selector {
{{/* query/path defines the query generation for path of a given edge. */}}
{{ define "dialect/sql/query/path" }}
{{- $n := $ }}
{{- $e := $.Scope.Edge }} {{/* the edge we need to genegrate the path to. */}}
{{- $receiver := $.Scope.Receiver }}
builder := sql.Dialect({{ $receiver }}.driver.Dialect())
{{- if $e.M2M }}
{{ $i := 1 }}{{ $j := 0 }}{{- if $e.IsInverse }}{{ $i = 0 }}{{ $j = 1 }}{{ end -}}
t1 := builder.Table({{ $e.Type.Package }}.Table)
t2 := {{ $receiver }}.sqlQuery()
t2.Select(t2.C({{ $.Package }}.{{ $.ID.Constant }}))
t3 := builder.Table({{ $.Package }}.{{ $e.TableConstant }})
t4 := builder.Select(t3.C({{ $.Package }}.{{ $e.PKConstant }}[{{ $i }}])).
From(t3).
Join(t2).
On(t3.C({{ $.Package }}.{{ $e.PKConstant }}[{{ $j }}]), t2.C({{ $.Package }}.{{ $.ID.Constant }}))
query.sql = builder.Select().
From(t1).
Join(t4).
On(t1.C({{ $e.Type.Package }}.{{ $e.Type.ID.Constant }}), t4.C({{ $.Package }}.{{ $e.PKConstant }}[{{ $i }}]))
{{- else if or $e.M2O (and $e.O2O $e.IsInverse) }}{{/* M2O || (O2O with inverse edge) */}}
t1 := builder.Table({{ $e.Type.Package }}.Table)
t2 := {{ $receiver }}.sqlQuery()
t2.Select(t2.C({{ $.Package }}.{{ $e.ColumnConstant }}))
query.sql = builder.Select(t1.Columns({{ $e.Type.Package }}.Columns...)...).
From(t1).
Join(t2).
On(t1.C({{ $e.Type.Package }}.{{ $e.Type.ID.Constant }}), t2.C({{ $.Package }}.{{ $e.ColumnConstant }}))
{{- else }}{{/* O2M || (O2O with assoc edge) */}}
t1 := builder.Table({{ $e.Type.Package }}.Table)
t2 := {{ $receiver }}.sqlQuery()
t2.Select(t2.C({{ $.Package }}.{{ $.ID.Constant }}))
query.sql = builder.Select().
From(t1).
Join(t2).
On(t1.C({{ $.Package }}.{{ $e.ColumnConstant }}), t2.C({{ $.Package }}.{{ $.ID.Constant }}))
{{- end }}
step := &sql.Step{}
step.From.V = {{ $receiver }}.sqlQuery()
step.From.Table = {{ $n.Package }}.Table
step.From.Column = {{ $n.Package }}.{{ $n.ID.Constant }}
step.To.Table = {{ $e.Type.Package }}.Table
step.To.Column = {{ $e.Type.Package }}.{{ $e.Type.ID.Constant }}
step.Edge.Rel = sql.{{ $e.Rel.Type }}
step.Edge.Inverse = {{ $e.IsInverse }}
step.Edge.Table = {{ $n.Package }}.{{ $e.TableConstant }}
step.Edge.Columns = append(step.Edge.Columns, {{ if $e.M2M }}{{ $n.Package }}.{{ $e.PKConstant }}...{{ else }}{{ $n.Package }}.{{ $e.ColumnConstant }}{{ end }})
query.sql = sql.SetNeighbors({{ $receiver }}.driver.Dialect(), step)
{{ end }}
{{/* query/from defines the query generation for an edge query from a given node. */}}