entc/gen: generate sql builders with dialect option

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

Reviewed By: alexsn

Differential Revision: D18164397

fbshipit-source-id: 2858d69d3ff85c06b51382c01c3d4369ee2c3bdb
This commit is contained in:
Ariel Mashraki
2019-10-27 21:52:31 -07:00
committed by Facebook Github Bot
parent ea479ea527
commit c259aee24b
241 changed files with 3899 additions and 2394 deletions

View File

@@ -61,8 +61,9 @@ func ({{ $receiver }} *{{ $builder }}) sqlExist(ctx context.Context) (bool, erro
}
func ({{ $receiver }} *{{ $builder }}) sqlQuery() *sql.Selector {
t1 := sql.Table({{ $.Package }}.Table)
selector := sql.Select(t1.Columns({{ $.Package }}.Columns...)...).From(t1)
builder := sql.Dialect({{ $receiver }}.driver.Dialect())
t1 := builder.Table({{ $.Package }}.Table)
selector := builder.Select(t1.Columns({{ $.Package }}.Columns...)...).From(t1)
if {{ $receiver }}.sql != nil {
selector = {{ $receiver }}.sql
selector.Select(selector.Columns({{ $.Package }}.Columns...)...)
@@ -90,33 +91,34 @@ func ({{ $receiver }} *{{ $builder }}) sqlQuery() *sql.Selector {
{{- $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 := sql.Table({{ $e.Type.Package }}.Table)
t1 := builder.Table({{ $e.Type.Package }}.Table)
t2 := {{ $receiver }}.sqlQuery()
t2.Select(t2.C({{ $.Package }}.{{ $.ID.Constant }}))
t3 := sql.Table({{ $.Package }}.{{ $e.TableConstant }})
t4 := sql.Select(t3.C({{ $.Package }}.{{ $e.PKConstant }}[{{ $i }}])).
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 = sql.Select().
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 := sql.Table({{ $e.Type.Package }}.Table)
t1 := builder.Table({{ $e.Type.Package }}.Table)
t2 := {{ $receiver }}.sqlQuery()
t2.Select(t2.C({{ $.Package }}.{{ $e.ColumnConstant }}))
query.sql = sql.Select(t1.Columns({{ $e.Type.Package }}.Columns...)...).
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 := sql.Table({{ $e.Type.Package }}.Table)
t1 := builder.Table({{ $e.Type.Package }}.Table)
t2 := {{ $receiver }}.sqlQuery()
t2.Select(t2.C({{ $.Package }}.{{ $.ID.Constant }}))
query.sql = sql.Select().
query.sql = builder.Select().
From(t1).
Join(t2).
On(t1.C({{ $.Package }}.{{ $e.ColumnConstant }}), t2.C({{ $.Package }}.{{ $.ID.Constant }}))
@@ -130,28 +132,29 @@ func ({{ $receiver }} *{{ $builder }}) sqlQuery() *sql.Selector {
{{- $receiver := $.Scope.Receiver -}}
id := {{ $receiver }}.{{- if $n.ID.IsString }}id(){{ else }}ID{{ end }}
builder := sql.Dialect({{ $receiver }}.driver.Dialect())
{{- if $e.M2M }}
{{ $i := 1 }}{{ $j := 0 }}{{- if $e.IsInverse }}{{ $i = 0 }}{{ $j = 1 }}{{ end -}}
t1 := sql.Table({{ $e.Type.Package }}.Table)
t2 := sql.Table({{ $n.Package }}.Table)
t3 := sql.Table({{ $n.Package }}.{{ $e.TableConstant }})
t4 := sql.Select(t3.C({{ $n.Package }}.{{ $e.PKConstant }}[{{ $i }}])).
t1 := builder.Table({{ $e.Type.Package }}.Table)
t2 := builder.Table({{ $n.Package }}.Table)
t3 := builder.Table({{ $n.Package }}.{{ $e.TableConstant }})
t4 := builder.Select(t3.C({{ $n.Package }}.{{ $e.PKConstant }}[{{ $i }}])).
From(t3).
Join(t2).
On(t3.C({{ $n.Package }}.{{ $e.PKConstant }}[{{ $j }}]), t2.C({{ $n.Package }}.{{ $n.ID.Constant }})).
Where(sql.EQ(t2.C({{ $n.Package }}.{{ $n.ID.Constant }}), id))
query.sql = sql.Select().
query.sql = builder.Select().
From(t1).
Join(t4).
On(t1.C({{ $e.Type.Package }}.{{ $e.Type.ID.Constant }}), t4.C({{ $n.Package }}.{{ $e.PKConstant }}[{{ $i }}]))
{{- else if or $e.M2O (and $e.O2O $e.IsInverse) }}{{/* M2O || (O2O with inverse edge) */}}
t1 := sql.Table({{ $e.Type.Package }}.Table)
t2 := sql.Select({{ $n.Package }}.{{ $e.ColumnConstant }}).
From(sql.Table({{ $n.Package }}.{{ $e.TableConstant }})).
t1 := builder.Table({{ $e.Type.Package }}.Table)
t2 := builder.Select({{ $n.Package }}.{{ $e.ColumnConstant }}).
From(builder.Table({{ $n.Package }}.{{ $e.TableConstant }})).
Where(sql.EQ({{ $n.Package }}.{{ $n.ID.Constant }}, id))
query.sql = sql.Select().From(t1).Join(t2).On(t1.C({{ $e.Type.Package }}.{{ $e.Type.ID.Constant }}), t2.C({{ $n.Package }}.{{ $e.ColumnConstant }}))
query.sql = builder.Select().From(t1).Join(t2).On(t1.C({{ $e.Type.Package }}.{{ $e.Type.ID.Constant }}), t2.C({{ $n.Package }}.{{ $e.ColumnConstant }}))
{{- else }}{{/* O2M || (O2O with assoc edge) */}}
query.sql = sql.Select().From(sql.Table({{ $e.Type.Package }}.Table)).
query.sql = builder.Select().From(builder.Table({{ $e.Type.Package }}.Table)).
Where(sql.EQ({{ $n.Package }}.{{ $e.ColumnConstant }}, id))
{{- end }}
{{ end }}