diff --git a/drivers/sqlboiler-mssql/driver/override/main/17_upsert.go.tpl b/drivers/sqlboiler-mssql/driver/override/main/17_upsert.go.tpl index 5665d3495..54fc69bbb 100644 --- a/drivers/sqlboiler-mssql/driver/override/main/17_upsert.go.tpl +++ b/drivers/sqlboiler-mssql/driver/override/main/17_upsert.go.tpl @@ -71,7 +71,7 @@ func (o *{{$alias.UpSingular}}) Upsert({{if .NoContext}}exec boil.Executor{{else var err error if !cached { - insert, ret := insertColumns.InsertColumnSet( + insert, _ := insertColumns.InsertColumnSet( {{$alias.DownSingular}}AllColumns, {{$alias.DownSingular}}ColumnsWithDefault, {{$alias.DownSingular}}ColumnsWithoutDefault, @@ -98,6 +98,8 @@ func (o *{{$alias.UpSingular}}) Upsert({{if .NoContext}}exec boil.Executor{{else insert = strmangle.SetComplement(insert, {{$alias.DownSingular}}GeneratedColumns) {{end}} + ret := strmangle.SetComplement({{$alias.DownSingular}}AllColumns, strmangle.SetIntersect(insert, update)) + if !updateColumns.IsNone() && len(update) == 0 { return errors.New("{{.PkgName}}: unable to upsert {{.Table.Name}}, could not build update column list") } diff --git a/drivers/sqlboiler-mysql/driver/override/main/17_upsert.go.tpl b/drivers/sqlboiler-mysql/driver/override/main/17_upsert.go.tpl index a1e4e95a4..0e86cc94d 100644 --- a/drivers/sqlboiler-mysql/driver/override/main/17_upsert.go.tpl +++ b/drivers/sqlboiler-mysql/driver/override/main/17_upsert.go.tpl @@ -89,7 +89,7 @@ func (o *{{$alias.UpSingular}}) Upsert({{if .NoContext}}exec boil.Executor{{else var err error if !cached { - insert, ret := insertColumns.InsertColumnSet( + insert, _ := insertColumns.InsertColumnSet( {{$alias.DownSingular}}AllColumns, {{$alias.DownSingular}}ColumnsWithDefault, {{$alias.DownSingular}}ColumnsWithoutDefault, @@ -109,7 +109,8 @@ func (o *{{$alias.UpSingular}}) Upsert({{if .NoContext}}exec boil.Executor{{else return errors.New("{{.PkgName}}: unable to upsert {{.Table.Name}}, could not build update column list") } - ret = strmangle.SetComplement(ret, nzUniques) + ret := strmangle.SetComplement({{$alias.DownSingular}}AllColumns, strmangle.SetIntersect(insert, update)) + cache.query = buildUpsertQueryMySQL(dialect, "{{$schemaTable}}", update, insert) cache.retQuery = fmt.Sprintf( "SELECT %s FROM {{.LQ}}{{.Table.Name}}{{.RQ}} WHERE %s", diff --git a/drivers/sqlboiler-psql/driver/override/main/17_upsert.go.tpl b/drivers/sqlboiler-psql/driver/override/main/17_upsert.go.tpl index 41c2485f5..592cffb08 100644 --- a/drivers/sqlboiler-psql/driver/override/main/17_upsert.go.tpl +++ b/drivers/sqlboiler-psql/driver/override/main/17_upsert.go.tpl @@ -82,7 +82,7 @@ func (o *{{$alias.UpSingular}}) Upsert({{if .NoContext}}exec boil.Executor{{else var err error if !cached { - insert, ret := insertColumns.InsertColumnSet( + insert, _ := insertColumns.InsertColumnSet( {{$alias.DownSingular}}AllColumns, {{$alias.DownSingular}}ColumnsWithDefault, {{$alias.DownSingular}}ColumnsWithoutDefault, @@ -102,6 +102,8 @@ func (o *{{$alias.UpSingular}}) Upsert({{if .NoContext}}exec boil.Executor{{else return errors.New("{{.PkgName}}: unable to upsert {{.Table.Name}}, could not build update column list") } + ret := strmangle.SetComplement({{$alias.DownSingular}}AllColumns, strmangle.SetIntersect(insert, update)) + conflict := conflictColumns if len(conflict) == 0 { conflict = make([]string, len({{$alias.DownSingular}}PrimaryKeyColumns)) diff --git a/drivers/sqlboiler-sqlite3/driver/override/main/17_upsert.go.tpl b/drivers/sqlboiler-sqlite3/driver/override/main/17_upsert.go.tpl index 648a061f5..39baad9e7 100644 --- a/drivers/sqlboiler-sqlite3/driver/override/main/17_upsert.go.tpl +++ b/drivers/sqlboiler-sqlite3/driver/override/main/17_upsert.go.tpl @@ -82,7 +82,7 @@ func (o *{{$alias.UpSingular}}) Upsert({{if .NoContext}}exec boil.Executor{{else var err error if !cached { - insert, ret := insertColumns.InsertColumnSet( + insert, _ := insertColumns.InsertColumnSet( {{$alias.DownSingular}}AllColumns, {{$alias.DownSingular}}ColumnsWithDefault, {{$alias.DownSingular}}ColumnsWithoutDefault, @@ -97,6 +97,8 @@ func (o *{{$alias.UpSingular}}) Upsert({{if .NoContext}}exec boil.Executor{{else return errors.New("{{.PkgName}}: unable to upsert {{.Table.Name}}, could not build update column list") } + ret := strmangle.SetComplement({{$alias.DownSingular}}AllColumns, strmangle.SetIntersect(insert, update)) + conflict := conflictColumns if len(conflict) == 0 { conflict = make([]string, len({{$alias.DownSingular}}PrimaryKeyColumns))