@@ -1306,7 +1306,13 @@ func (u *updater) node(ctx context.Context, tx dialect.ExecQuerier) error {
13061306 return err
13071307 }
13081308 if ! update .Empty () {
1309- affected , err := execUpdate (ctx , tx , update , u .Node .ID .Column )
1309+ var returningColumn string
1310+ if u .Node .ID != nil {
1311+ returningColumn = u .Node .ID .Column
1312+ } else {
1313+ returningColumn = u .Node .CompositeID [0 ].Column
1314+ }
1315+ affected , err := execUpdate (ctx , tx , update , returningColumn )
13101316 if err != nil {
13111317 return err
13121318 }
@@ -1537,10 +1543,21 @@ func (u *updater) scan(rows *sql.Rows) error {
15371543func (u * updater ) ensureExists (ctx context.Context ) error {
15381544 selector := u .builder .
15391545 Select ().
1540- From (u .builder .Table (u .Node .Table ).Schema (u .Node .Schema )).
1541- Where (sql .EQ (u .Node .ID .Column , u .Node .ID .Value ))
1546+ From (u .builder .Table (u .Node .Table ).Schema (u .Node .Schema ))
1547+
1548+ var idValue any
1549+ if u .Node .ID != nil {
1550+ selector .Where (sql .EQ (u .Node .ID .Column , u .Node .ID .Value ))
1551+ idValue = u .Node .ID .Value
1552+ } else {
1553+ selector .Where (sql .And (
1554+ sql .EQ (u .Node .CompositeID [0 ].Column , u .Node .CompositeID [0 ].Value ),
1555+ sql .EQ (u .Node .CompositeID [1 ].Column , u .Node .CompositeID [1 ].Value ),
1556+ ))
1557+ idValue = []any {u .Node .CompositeID [0 ].Value , u .Node .CompositeID [1 ].Value }
1558+ }
15421559 u .Predicate (selector )
1543-
1560+
15441561 var query string
15451562 var args []any
15461563
@@ -1557,7 +1574,7 @@ func (u *updater) ensureExists(ctx context.Context) error {
15571574 return err
15581575 }
15591576 if ! found {
1560- return & NotFoundError {table : u .Node .Table , id : u . Node . ID . Value }
1577+ return & NotFoundError {table : u .Node .Table , id : idValue }
15611578 }
15621579 return nil
15631580}
@@ -2109,14 +2126,14 @@ func execUpdate(
21092126 }
21102127
21112128 return affected , nil
2129+ } else {
2130+ query , args := update .Query ()
2131+ var res sql.Result
2132+ if err := tx .Exec (ctx , query , args , & res ); err != nil {
2133+ return 0 , err
2134+ }
2135+ return res .RowsAffected ()
21122136 }
2113-
2114- query , args := update .Query ()
2115- var res sql.Result
2116- if err := tx .Exec (ctx , query , args , & res ); err != nil {
2117- return 0 , err
2118- }
2119- return res .RowsAffected ()
21202137}
21212138
21222139// isExternalEdge reports if the given edge requires an UPDATE
0 commit comments