Fix broken relationship templates by adding schema
This commit is contained in:
parent
51b4f9b309
commit
ac02f7d2e0
8 changed files with 70 additions and 55 deletions
|
@ -1,5 +1,7 @@
|
|||
{{- define "relationship_to_one_helper" -}}
|
||||
{{- $varNameSingular := .ForeignKey.ForeignTable | singular | camelCase -}}
|
||||
{{- $tmplData := .Dot -}}{{/* .Dot holds the root templateData struct, passed in through preserveDot */}}
|
||||
{{- with .Rel -}}{{/* Rel holds the text helper data, passed in through preserveDot */}}
|
||||
{{- $varNameSingular := .ForeignKey.ForeignTable | singular | camelCase -}}
|
||||
// {{.Function.Name}}G pointed to by the foreign key.
|
||||
func ({{.Function.Receiver}} *{{.LocalTable.NameGo}}) {{.Function.Name}}G(mods ...qm.QueryMod) {{$varNameSingular}}Query {
|
||||
return {{.Function.Receiver}}.{{.Function.Name}}(boil.GetDB(), mods...)
|
||||
|
@ -14,18 +16,19 @@ func ({{.Function.Receiver}} *{{.LocalTable.NameGo}}) {{.Function.Name}}(exec bo
|
|||
queryMods = append(queryMods, mods...)
|
||||
|
||||
query := {{.ForeignTable.NamePluralGo}}(exec, queryMods...)
|
||||
boil.SetFrom(query.Query, `{{schemaTable .DriverName .Schema .ForeignTable.Name}}`)
|
||||
boil.SetFrom(query.Query, `{{schemaTable $tmplData.DriverName $tmplData.Schema .ForeignTable.Name}}`)
|
||||
|
||||
return query
|
||||
}
|
||||
{{- end -}}{{/* end with */}}
|
||||
{{end -}}{{/* end define */}}
|
||||
|
||||
{{/* Begin execution of template for one-to-one relationship. */}}
|
||||
{{- /* Begin execution of template for one-to-one relationship */ -}}
|
||||
{{- if .Table.IsJoinTable -}}
|
||||
{{- else -}}
|
||||
{{- $dot := . -}}
|
||||
{{- range .Table.FKeys -}}
|
||||
{{- $rel := textsFromForeignKey $dot.PkgName $dot.Tables $dot.Table . -}}
|
||||
{{- template "relationship_to_one_helper" $rel -}}
|
||||
{{- $txt := textsFromForeignKey $dot.PkgName $dot.Tables $dot.Table . -}}
|
||||
{{- template "relationship_to_one_helper" (preserveDot $dot $txt) -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
{{- /* Begin execution of template for many-to-one or many-to-many relationship helper */ -}}
|
||||
{{- if .Table.IsJoinTable -}}
|
||||
{{- else -}}
|
||||
{{- $dot := . -}}
|
||||
|
@ -5,11 +6,12 @@
|
|||
{{- range .Table.ToManyRelationships -}}
|
||||
{{- $varNameSingular := .ForeignTable | singular | camelCase -}}
|
||||
{{- if (and .ForeignColumnUnique (not .ToJoinTable)) -}}
|
||||
{{- /* Begin execution of template for many-to-one relationship. */ -}}
|
||||
{{- template "relationship_to_one_helper" (textsFromOneToOneRelationship $dot.PkgName $dot.Tables $table .) -}}
|
||||
{{- /* Begin execution of template for many-to-one relationship. */ -}}
|
||||
{{- $txt := textsFromOneToOneRelationship $dot.PkgName $dot.Tables $table . -}}
|
||||
{{- template "relationship_to_one_helper" (preserveDot $dot $txt) -}}
|
||||
{{- else -}}
|
||||
{{- /* Begin execution of template for many-to-many relationship. */ -}}
|
||||
{{- $rel := textsFromRelationship $dot.Tables $table . -}}
|
||||
{{- /* Begin execution of template for many-to-many relationship. */ -}}
|
||||
{{- $rel := textsFromRelationship $dot.Tables $table . -}}
|
||||
// {{$rel.Function.Name}}G retrieves all the {{$rel.LocalTable.NameSingular}}'s {{$rel.ForeignTable.NameHumanReadable}}
|
||||
{{- if not (eq $rel.Function.Name $rel.ForeignTable.NamePluralGo)}} via {{.ForeignColumn}} column{{- end}}.
|
||||
func ({{$rel.Function.Receiver}} *{{$rel.LocalTable.NameGo}}) {{$rel.Function.Name}}G(mods ...qm.QueryMod) {{$varNameSingular}}Query {
|
||||
|
@ -45,4 +47,4 @@ func ({{$rel.Function.Receiver}} *{{$rel.LocalTable.NameGo}}) {{$rel.Function.Na
|
|||
|
||||
{{end -}}{{- /* if unique foreign key */ -}}
|
||||
{{- end -}}{{- /* range relationships */ -}}
|
||||
{{- end -}}{{- /* outer if join table */ -}}
|
||||
{{- end -}}{{- /* if isJoinTable */ -}}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{{- define "relationship_to_one_eager_helper" -}}
|
||||
{{- $varNameSingular := .Dot.Table.Name | singular | camelCase -}}
|
||||
{{- $noHooks := .Dot.NoHooks -}}
|
||||
{{- $tmplData := .Dot -}}{{/* .Dot holds the root templateData struct, passed in through preserveDot */}}
|
||||
{{- $varNameSingular := $tmplData.Table.Name | singular | camelCase -}}
|
||||
{{- with .Rel -}}
|
||||
{{- $arg := printf "maybe%s" .LocalTable.NameGo -}}
|
||||
{{- $slice := printf "%sSlice" .LocalTable.NameGo -}}
|
||||
|
@ -28,7 +28,7 @@ func ({{$varNameSingular}}L) Load{{.Function.Name}}(e boil.Executor, singular bo
|
|||
}
|
||||
|
||||
query := fmt.Sprintf(
|
||||
`select * from {{schemaTable .DriverName .Schema .ForeignKey.ForeignTable}} where "{{.ForeignKey.ForeignColumn}}" in (%s)`,
|
||||
`select * from {{schemaTable $tmplData.DriverName $tmplData.Schema .ForeignKey.ForeignTable}} where "{{.ForeignKey.ForeignColumn}}" in (%s)`,
|
||||
strmangle.Placeholders(count, 1, 1),
|
||||
)
|
||||
|
||||
|
@ -47,7 +47,7 @@ func ({{$varNameSingular}}L) Load{{.Function.Name}}(e boil.Executor, singular bo
|
|||
return errors.Wrap(err, "failed to bind eager loaded slice {{.ForeignTable.NameGo}}")
|
||||
}
|
||||
|
||||
{{if not $noHooks -}}
|
||||
{{if not $tmplData.NoHooks -}}
|
||||
if len({{.ForeignTable.Name | singular | camelCase}}AfterSelectHooks) != 0 {
|
||||
for _, obj := range resultSlice {
|
||||
if err := obj.doAfterSelectHooks(e); err != nil {
|
||||
|
@ -82,11 +82,12 @@ func ({{$varNameSingular}}L) Load{{.Function.Name}}(e boil.Executor, singular bo
|
|||
{{- end -}}{{- /* end with */ -}}
|
||||
{{end -}}{{- /* end define */ -}}
|
||||
|
||||
{{- /* Begin execution of template for one-to-one eager load */ -}}
|
||||
{{- if .Table.IsJoinTable -}}
|
||||
{{- else -}}
|
||||
{{- $dot := . -}}
|
||||
{{- range .Table.FKeys -}}
|
||||
{{- $rel := textsFromForeignKey $dot.PkgName $dot.Tables $dot.Table . -}}
|
||||
{{- template "relationship_to_one_eager_helper" (preserveDot $dot $rel) -}}
|
||||
{{- end -}}
|
||||
{{- $txt := textsFromForeignKey $dot.PkgName $dot.Tables $dot.Table . -}}
|
||||
{{- template "relationship_to_one_eager_helper" (preserveDot $dot $txt) -}}
|
||||
{{- end -}}
|
||||
{{end}}
|
||||
|
|
|
@ -1,15 +1,18 @@
|
|||
{{- /* Begin execution of template for many-to-one or many-to-many eager load */ -}}
|
||||
{{- if .Table.IsJoinTable -}}
|
||||
{{- else -}}
|
||||
{{- $dot := . -}}
|
||||
{{- range .Table.ToManyRelationships -}}
|
||||
{{- if (and .ForeignColumnUnique (not .ToJoinTable)) -}}
|
||||
{{- $txt := textsFromOneToOneRelationship $dot.PkgName $dot.Tables $dot.Table . -}}
|
||||
{{- template "relationship_to_one_eager_helper" (preserveDot $dot $txt) -}}
|
||||
{{- else -}}
|
||||
{{- $varNameSingular := $dot.Table.Name | singular | camelCase -}}
|
||||
{{- $txt := textsFromRelationship $dot.Tables $dot.Table . -}}
|
||||
{{- $arg := printf "maybe%s" $txt.LocalTable.NameGo -}}
|
||||
{{- $slice := printf "%sSlice" $txt.LocalTable.NameGo -}}
|
||||
{{- $dot := . -}}
|
||||
{{- range .Table.ToManyRelationships -}}
|
||||
{{- if (and .ForeignColumnUnique (not .ToJoinTable)) -}}
|
||||
{{- /* Begin execution of template for many-to-one eager load */ -}}
|
||||
{{- $txt := textsFromOneToOneRelationship $dot.PkgName $dot.Tables $dot.Table . -}}
|
||||
{{- template "relationship_to_one_eager_helper" (preserveDot $dot $txt) -}}
|
||||
{{- else -}}
|
||||
{{- /* Begin execution of template for many-to-many eager load */ -}}
|
||||
{{- $varNameSingular := $dot.Table.Name | singular | camelCase -}}
|
||||
{{- $txt := textsFromRelationship $dot.Tables $dot.Table . -}}
|
||||
{{- $arg := printf "maybe%s" $txt.LocalTable.NameGo -}}
|
||||
{{- $slice := printf "%sSlice" $txt.LocalTable.NameGo -}}
|
||||
// Load{{$txt.Function.Name}} allows an eager lookup of values, cached into the
|
||||
// loaded structs of the objects.
|
||||
func ({{$varNameSingular}}L) Load{{$txt.Function.Name}}(e boil.Executor, singular bool, {{$arg}} interface{}) error {
|
||||
|
@ -35,7 +38,7 @@ func ({{$varNameSingular}}L) Load{{$txt.Function.Name}}(e boil.Executor, singula
|
|||
|
||||
{{if .ToJoinTable -}}
|
||||
query := fmt.Sprintf(
|
||||
`select "{{id 0}}".*, "{{id 1}}"."{{.JoinLocalColumn}}" from {{schemaTable .DriverName .Schema .ForeignTable}} as "{{id 0}}" inner join {{schemaTable .DriverName .Schema .JoinTable}} as "{{id 1}}" on "{{id 0}}"."{{.ForeignColumn}}" = "{{id 1}}"."{{.JoinForeignColumn}}" where "{{id 1}}"."{{.JoinLocalColumn}}" in (%s)`,
|
||||
`select "{{id 0}}".*, "{{id 1}}"."{{.JoinLocalColumn}}" from {{schemaTable $dot.DriverName $dot.Schema .ForeignTable}} as "{{id 0}}" inner join {{schemaTable $dot.DriverName $dot.Schema .JoinTable}} as "{{id 1}}" on "{{id 0}}"."{{.ForeignColumn}}" = "{{id 1}}"."{{.JoinForeignColumn}}" where "{{id 1}}"."{{.JoinLocalColumn}}" in (%s)`,
|
||||
strmangle.Placeholders(count, 1, 1),
|
||||
)
|
||||
{{else -}}
|
||||
|
@ -133,4 +136,4 @@ func ({{$varNameSingular}}L) Load{{$txt.Function.Name}}(e boil.Executor, singula
|
|||
|
||||
{{end -}}{{/* if ForeignColumnUnique */}}
|
||||
{{- end -}}{{/* range tomany */}}
|
||||
{{- end -}}{{/* if isjointable */}}
|
||||
{{- end -}}{{/* if IsJoinTable */}}
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
{{- define "relationship_to_one_setops_helper" -}}
|
||||
{{- $varNameSingular := .ForeignKey.ForeignTable | singular | camelCase -}}
|
||||
{{- $localNameSingular := .ForeignKey.Table | singular | camelCase}}
|
||||
|
||||
{{- $tmplData := .Dot -}}{{/* .Dot holds the root templateData struct, passed in through preserveDot */}}
|
||||
{{- with .Rel -}}
|
||||
{{- $varNameSingular := .ForeignKey.ForeignTable | singular | camelCase -}}
|
||||
{{- $localNameSingular := .ForeignKey.Table | singular | camelCase}}
|
||||
// Set{{.Function.Name}} of the {{.ForeignKey.Table | singular}} to the related item.
|
||||
// Sets {{.Function.Receiver}}.R.{{.Function.Name}} to related.
|
||||
// Adds {{.Function.Receiver}} to related.R.{{.Function.ForeignName}}.
|
||||
|
@ -51,8 +52,8 @@ func ({{.Function.Receiver}} *{{.LocalTable.NameGo}}) Set{{.Function.Name}}(exec
|
|||
{{end -}}
|
||||
return nil
|
||||
}
|
||||
{{- if .ForeignKey.Nullable}}
|
||||
|
||||
{{- if .ForeignKey.Nullable}}
|
||||
// Remove{{.Function.Name}} relationship.
|
||||
// Sets {{.Function.Receiver}}.R.{{.Function.Name}} to nil.
|
||||
// Removes {{.Function.Receiver}} from all passed in related items' relationships struct (Optional).
|
||||
|
@ -89,13 +90,16 @@ func ({{.Function.Receiver}} *{{.LocalTable.NameGo}}) Remove{{.Function.Name}}(e
|
|||
|
||||
return nil
|
||||
}
|
||||
{{end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}{{/* if foreignkey nullable */}}
|
||||
{{end -}}{{/* end with */}}
|
||||
{{- end -}}{{/* end define */}}
|
||||
|
||||
{{- /* Begin execution of template for one-to-one setops */ -}}
|
||||
{{- if .Table.IsJoinTable -}}
|
||||
{{- else -}}
|
||||
{{- $dot := . -}}
|
||||
{{- range .Table.FKeys -}}
|
||||
{{- $rel := textsFromForeignKey $dot.PkgName $dot.Tables $dot.Table . -}}
|
||||
{{- template "relationship_to_one_setops_helper" $rel -}}
|
||||
{{- end -}}
|
||||
{{- $txt := textsFromForeignKey $dot.PkgName $dot.Tables $dot.Table . -}}
|
||||
{{- template "relationship_to_one_setops_helper" (preserveDot $dot $txt) -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
{{- /* Begin execution of template for many-to-one or many-to-many setops */ -}}
|
||||
{{- if .Table.IsJoinTable -}}
|
||||
{{- else -}}
|
||||
{{- $dot := . -}}
|
||||
|
@ -5,12 +6,13 @@
|
|||
{{- range .Table.ToManyRelationships -}}
|
||||
{{- $varNameSingular := .ForeignTable | singular | camelCase -}}
|
||||
{{- if (and .ForeignColumnUnique (not .ToJoinTable)) -}}
|
||||
{{- template "relationship_to_one_setops_helper" (textsFromOneToOneRelationship $dot.PkgName $dot.Tables $table .) -}}
|
||||
{{- /* Begin execution of template for many-to-one setops */ -}}
|
||||
{{- $txt := textsFromOneToOneRelationship $dot.PkgName $dot.Tables $table . -}}
|
||||
{{- template "relationship_to_one_setops_helper" (preserveDot $dot $txt) -}}
|
||||
{{- else -}}
|
||||
{{- $rel := textsFromRelationship $dot.Tables $table . -}}
|
||||
{{- $localNameSingular := .Table | singular | camelCase -}}
|
||||
{{- $foreignNameSingular := .ForeignTable | singular | camelCase}}
|
||||
|
||||
{{- $rel := textsFromRelationship $dot.Tables $table . -}}
|
||||
{{- $localNameSingular := .Table | singular | camelCase -}}
|
||||
{{- $foreignNameSingular := .ForeignTable | singular | camelCase}}
|
||||
// Add{{$rel.Function.Name}} adds the given related objects to the existing relationships
|
||||
// of the {{$table.Name | singular}}, optionally inserting them as new records.
|
||||
// Appends related to {{$rel.Function.Receiver}}.R.{{$rel.Function.Name}}.
|
||||
|
@ -37,7 +39,7 @@ func ({{$rel.Function.Receiver}} *{{$rel.LocalTable.NameGo}}) Add{{$rel.Function
|
|||
|
||||
{{if .ToJoinTable -}}
|
||||
for _, rel := range related {
|
||||
query := `insert into {{schemaTable .DriverName .Schema .JoinTable}} ({{.JoinLocalColumn}}, {{.JoinForeignColumn}}) values ($1, $2)`
|
||||
query := `insert into {{schemaTable $dot.DriverName $dot.Schema .JoinTable}} ({{.JoinLocalColumn}}, {{.JoinForeignColumn}}) values ($1, $2)`
|
||||
values := []interface{}{{"{"}}{{$rel.Function.Receiver}}.{{$rel.LocalTable.ColumnNameGo}}, rel.{{$rel.ForeignTable.ColumnNameGo}}}
|
||||
|
||||
if boil.DebugMode {
|
||||
|
@ -84,8 +86,8 @@ func ({{$rel.Function.Receiver}} *{{$rel.LocalTable.NameGo}}) Add{{$rel.Function
|
|||
|
||||
return nil
|
||||
}
|
||||
{{- if (or .ForeignColumnNullable .ToJoinTable)}}
|
||||
|
||||
{{- if (or .ForeignColumnNullable .ToJoinTable)}}
|
||||
// Set{{$rel.Function.Name}} removes all previously related items of the
|
||||
// {{$table.Name | singular}} replacing them completely with the passed
|
||||
// in related items, optionally inserting them as new records.
|
||||
|
@ -138,7 +140,7 @@ func ({{$rel.Function.Receiver}} *{{$rel.LocalTable.NameGo}}) Remove{{$rel.Funct
|
|||
var err error
|
||||
{{if .ToJoinTable -}}
|
||||
query := fmt.Sprintf(
|
||||
`delete from {{schemaTable .DriverName .Schema .JoinTable}} where "{{.JoinLocalColumn}}" = $1 and "{{.JoinForeignColumn}}" in (%s)`,
|
||||
`delete from {{schemaTable $dot.DriverName $dot.Schema .JoinTable}} where "{{.JoinLocalColumn}}" = $1 and "{{.JoinForeignColumn}}" in (%s)`,
|
||||
strmangle.Placeholders(len(related), 1, 1),
|
||||
)
|
||||
values := []interface{}{{"{"}}{{$rel.Function.Receiver}}.{{$rel.LocalTable.ColumnNameGo}}}
|
||||
|
@ -191,7 +193,7 @@ func ({{$rel.Function.Receiver}} *{{$rel.LocalTable.NameGo}}) Remove{{$rel.Funct
|
|||
return nil
|
||||
}
|
||||
|
||||
{{if .ToJoinTable -}}
|
||||
{{if .ToJoinTable -}}
|
||||
func remove{{$rel.LocalTable.NameGo}}From{{$rel.ForeignTable.NameGo}}Slice({{$rel.Function.Receiver}} *{{$rel.LocalTable.NameGo}}, related []*{{$rel.ForeignTable.NameGo}}) {
|
||||
for _, rel := range related {
|
||||
if rel.R == nil {
|
||||
|
@ -211,8 +213,8 @@ func remove{{$rel.LocalTable.NameGo}}From{{$rel.ForeignTable.NameGo}}Slice({{$re
|
|||
}
|
||||
}
|
||||
}
|
||||
{{end -}}{{- /* if join table */ -}}
|
||||
{{- end -}}{{- /* if nullable foreign key */ -}}
|
||||
{{- end -}}{{- /* if unique foreign key */ -}}
|
||||
{{- end -}}{{- /* range relationships */ -}}
|
||||
{{- end -}}{{- /* outer if join table */ -}}
|
||||
{{end -}}{{- /* if ToJoinTable */ -}}
|
||||
{{- end -}}{{- /* if nullable foreign key */ -}}
|
||||
{{- end -}}{{- /* if unique foreign key */ -}}
|
||||
{{- end -}}{{- /* range relationships */ -}}
|
||||
{{- end -}}{{- /* if IsJoinTable */ -}}
|
||||
|
|
|
@ -98,7 +98,7 @@ func dropTestDB() error {
|
|||
|
||||
// DBConnect connects to a database and returns the handle.
|
||||
func DBConnect(user, pass, dbname, host string, port int, sslmode string) (*sql.DB, error) {
|
||||
connStr := drivers.BuildQueryString(user, pass, dbname, host, port, sslmode)
|
||||
connStr := drivers.PostgresBuildQueryString(user, pass, dbname, host, port, sslmode)
|
||||
|
||||
return sql.Open("postgres", connStr)
|
||||
}
|
||||
|
|
|
@ -41,11 +41,11 @@ func test{{$rel.LocalTable.NameGo}}ToMany{{$rel.Function.Name}}(t *testing.T) {
|
|||
}
|
||||
|
||||
{{if .ToJoinTable -}}
|
||||
_, err = tx.Exec(`insert into "{{schemaTable .DriverName .Schema .JoinTable}}" ({{.JoinLocalColumn}}, {{.JoinForeignColumn}}) values ($1, $2)`, a.{{$rel.LocalTable.ColumnNameGo}}, b.{{$rel.ForeignTable.ColumnNameGo}})
|
||||
_, err = tx.Exec(`insert into {{schemaTable $dot.DriverName $dot.Schema .JoinTable}} ({{.JoinLocalColumn}}, {{.JoinForeignColumn}}) values ($1, $2)`, a.{{$rel.LocalTable.ColumnNameGo}}, b.{{$rel.ForeignTable.ColumnNameGo}})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_, err = tx.Exec(`insert into "{{schemaTable .DriverName .Schema .JoinTable}}" ({{.JoinLocalColumn}}, {{.JoinForeignColumn}}) values ($1, $2)`, a.{{$rel.LocalTable.ColumnNameGo}}, c.{{$rel.ForeignTable.ColumnNameGo}})
|
||||
_, err = tx.Exec(`insert into {{schemaTable $dot.DriverName $dot.Schema .JoinTable}} ({{.JoinLocalColumn}}, {{.JoinForeignColumn}}) values ($1, $2)`, a.{{$rel.LocalTable.ColumnNameGo}}, c.{{$rel.ForeignTable.ColumnNameGo}})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue