Skip to content

Commit 0c5e907

Browse files
dialect/sql/sqlgraph: fixed handling composite primary key
1 parent c266bf3 commit 0c5e907

File tree

1 file changed

+29
-12
lines changed

1 file changed

+29
-12
lines changed

dialect/sql/sqlgraph/graph.go

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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 {
15371543
func (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

Comments
 (0)