Files
ent/entc/gen/template/migrate/schema.tmpl
Ariel Mashraki 2128fc2ca1 ent/index: add indexes api
Reviewed By: alexsn

Differential Revision: D16757699

fbshipit-source-id: 6a0027b1f855721f1415b8c72b5b1be8bc2ce902
2019-08-12 06:44:40 -07:00

105 lines
3.1 KiB
Cheetah

{{ define "schema" }}
{{- with extend $ "Package" "migrate" -}}
{{ template "header" . }}
{{ end }}
import (
"fbc/ent/field"
"fbc/ent/dialect/sql/schema"
)
var (
nullable = true
{{- range $_, $t := $.Tables }}
{{- $columns := pascal $t.Name | printf "%sColumns" }}
// {{ $columns }} holds the columns for the "{{ $t.Name }}" table.
{{ $columns }} = []*schema.Column{
{{- range $_, $c := $t.Columns }}
{ Name: "{{ $c.Name }}", Type: field.{{ $c.Type.ConstName }},
{{- if $c.Unique }} Unique: true,{{ end }}
{{- if $c.Increment }} Increment: true,{{ end }}
{{- if or $c.Nullable }} Nullable: &nullable,{{ end }}
{{- with $c.Size }} Size: {{ . }},{{ end }}
{{- with $c.Attr }} Attr: "{{ . }}",{{ end }}
{{- with $c.Default }} Default: "{{ . }}",{{ end }}
{{- with $c.Charset }} Charset: "{{ . }}",{{ end }} },
{{- end }}
}
{{- $table := pascal $t.Name | printf "%sTable" }}
// {{ $table }} holds the schema information for the "{{ $t.Name }}" table.
{{ $table }} = &schema.Table{
Name: "{{ $t.Name }}",
Columns: {{ $columns }},
PrimaryKey: []*schema.Column{
{{- range $_, $pk := $t.PrimaryKey }}
{{- range $i, $c := $t.Columns }}
{{- if eq $pk.Name $c.Name }}{{ $columns }}[{{ $i }}],{{ end }}
{{- end }}
{{- end }}
},
ForeignKeys: []*schema.ForeignKey{
{{- range $_, $fk := $t.ForeignKeys }}
{
Symbol: "{{ $fk.Symbol }}",
Columns: []*schema.Column{
{{- range $_, $c1 := $fk.Columns }}
{{- range $i, $c2 := $t.Columns }}
{{- if eq $c1.Name $c2.Name }}{{ $columns }}[{{ $i }}],{{ end }}
{{- end }}
{{- end }}
},
{{/* postpone refrencing to avoid typechecking loops */}}
RefColumns: []*schema.Column{
{{- range $_, $c1 := $fk.RefColumns }}
{{- range $i, $c2 := $fk.RefTable.Columns }}
{{- if eq $c1.Name $c2.Name }}{{ pascal $fk.RefTable.Name | printf "%sColumns" }}[{{ $i }}],{{ end }}
{{- end }}
{{- end }}
},
{{- with $fk.OnUpdate.ConstName }}
OnUpdate: schema.{{ . }},
{{- end }}
{{- with $fk.OnDelete.ConstName }}
OnDelete: schema.{{ . }},
{{- end }}
},
{{- end }}
},
{{- if $t.Indexes }}
Indexes: []*schema.Index{
{{- range $_, $idx := $t.Indexes }}
{
Name: "{{ $idx.Name }}",
Unique: {{ $idx.Unique }},
Columns: []*schema.Column{
{{- range $_, $c1 := $idx.Columns }}
{{- range $i, $c2 := $t.Columns }}
{{- if eq $c1.Name $c2.Name }}{{ $columns }}[{{ $i }}],{{ end }}
{{- end }}
{{- end }}
},
},
{{- end }}
},
{{- end }}
}
{{- end }}
// Tables holds all the tables in the schema.
Tables = []*schema.Table{
{{- range $_, $t := $.Tables }}
{{ pascal $t.Name | printf "%sTable" }},
{{- end }}
}
)
func init() {
{{- range $_, $t := $.Tables }}
{{- $table := pascal $t.Name | printf "%sTable" }}
{{- range $i, $fk := $t.ForeignKeys }}
{{ $table }}.ForeignKeys[{{ $i }}].RefTable = {{ pascal $fk.RefTable.Name | printf "%sTable" }}
{{- end }}
{{- end }}
}
{{ end }}