sqlboiler/templates/11_relationship_one_to_one_setops.tpl

91 lines
3.2 KiB
Smarty
Raw Normal View History

2016-09-18 20:13:11 +02:00
{{- if .Table.IsJoinTable -}}
{{- else -}}
{{- $dot := . -}}
2016-09-19 01:49:18 +02:00
{{- range .Table.ToOneRelationships -}}
{{- $txt := txtsFromOneToOne $dot.Tables $dot.Table . -}}
2016-09-24 23:34:31 +02:00
{{- $varNameSingular := .Table | singular | camelCase -}}
{{- $foreignVarNameSingular := .ForeignTable | singular | camelCase -}}
{{- $foreignPKeyCols := (getTable $dot.Tables .ForeignTable).PKey.Columns -}}
{{- $foreignSchemaTable := .ForeignTable | $dot.SchemaTable}}
2016-09-19 01:02:08 +02:00
// Set{{$txt.Function.Name}} of the {{.Table | singular}} to the related item.
2016-09-21 05:37:28 +02:00
// Sets o.R.{{$txt.Function.Name}} to related.
// Adds o to related.R.{{$txt.Function.ForeignName}}.
func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}(exec boil.Executor, insert bool, related *{{$txt.ForeignTable.NameGo}}) error {
var err error
if insert {
2016-09-24 23:34:31 +02:00
related.{{$txt.Function.ForeignAssignment}} = o.{{$txt.Function.LocalAssignment}}
{{if .ForeignColumnNullable -}}
related.{{$txt.ForeignTable.ColumnNameGo}}.Valid = true
{{- end}}
if err = related.Insert(exec); err != nil {
return errors.Wrap(err, "failed to insert into foreign table")
}
} else {
2016-09-24 23:34:31 +02:00
updateQuery := fmt.Sprintf(
"UPDATE {{$foreignSchemaTable}} SET %s WHERE %s",
strmangle.SetParamNames("{{$dot.LQ}}", "{{$dot.RQ}}", {{if $dot.Dialect.IndexPlaceholders}}1{{else}}0{{end}}, []string{{"{"}}"{{.ForeignColumn}}"{{"}"}}),
strmangle.WhereClause("{{$dot.LQ}}", "{{$dot.RQ}}", {{if $dot.Dialect.IndexPlaceholders}}2{{else}}0{{end}}, {{$foreignVarNameSingular}}PrimaryKeyColumns),
)
values := []interface{}{o.{{$txt.LocalTable.ColumnNameGo}}, related.{{$foreignPKeyCols | stringMap $dot.StringFuncs.titleCase | join ", related."}}{{"}"}}
if boil.DebugMode {
fmt.Fprintln(boil.DebugWriter, updateQuery)
fmt.Fprintln(boil.DebugWriter, values)
}
if _, err = exec.Exec(updateQuery, values...); err != nil {
return errors.Wrap(err, "failed to update foreign table")
2016-09-19 02:43:44 +02:00
}
2016-09-24 23:34:31 +02:00
related.{{$txt.Function.ForeignAssignment}} = o.{{$txt.Function.LocalAssignment}}
{{if .ForeignColumnNullable -}}
related.{{$txt.ForeignTable.ColumnNameGo}}.Valid = true
{{- end}}
}
2016-08-27 07:43:50 +02:00
2016-09-24 23:34:31 +02:00
2016-09-21 05:37:28 +02:00
if o.R == nil {
2016-09-24 23:34:31 +02:00
o.R = &{{$varNameSingular}}R{
2016-09-18 20:13:11 +02:00
{{$txt.Function.Name}}: related,
}
} else {
2016-09-21 05:37:28 +02:00
o.R.{{$txt.Function.Name}} = related
}
2016-08-27 07:43:50 +02:00
if related.R == nil {
2016-09-24 23:34:31 +02:00
related.R = &{{$foreignVarNameSingular}}R{
2016-09-21 05:37:28 +02:00
{{$txt.Function.ForeignName}}: o,
}
} else {
2016-09-21 05:37:28 +02:00
related.R.{{$txt.Function.ForeignName}} = o
}
return nil
2016-08-26 08:50:45 +02:00
}
2016-09-19 02:43:44 +02:00
{{- if .ForeignColumnNullable}}
2016-09-18 20:13:11 +02:00
// Remove{{$txt.Function.Name}} relationship.
2016-09-21 05:37:28 +02:00
// Sets o.R.{{$txt.Function.Name}} to nil.
// Removes o from all passed in related items' relationships struct (Optional).
func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}(exec boil.Executor, related *{{$txt.ForeignTable.NameGo}}) error {
var err error
2016-09-19 02:43:44 +02:00
related.{{$txt.ForeignTable.ColumnNameGo}}.Valid = false
if err = related.Update(exec, "{{.ForeignColumn}}"); err != nil {
related.{{$txt.ForeignTable.ColumnNameGo}}.Valid = true
return errors.Wrap(err, "failed to update local table")
}
2016-09-21 05:37:28 +02:00
o.R.{{$txt.Function.Name}} = nil
if related == nil || related.R == nil {
return nil
}
2016-09-01 06:38:25 +02:00
2016-09-18 20:13:11 +02:00
related.R.{{$txt.Function.ForeignName}} = nil
return nil
2016-08-26 08:50:45 +02:00
}
{{end -}}{{/* if foreignkey nullable */}}
2016-09-18 20:13:11 +02:00
{{- end -}}{{/* range */}}
{{- end -}}{{/* join table */}}