Skip to content

Commit 56b5487

Browse files
committed
Use sqlc.embed to embed a RiverJob row during unique insertion
Follows up #451 with a significant code quality improvement in which we can use `sqlc.embed` (which TIL about) to embed a `RiverJob` row directly on the returned struct, which means we can use our normal `jobRowFromInternal` to map it to a driver result instead of having to manually construct `RiverJob` property by property. Tipped off to the existence of `sqlc.embed` by @tadejsv [1]. Thank you! [1] #451 (comment)
1 parent 439c789 commit 56b5487

5 files changed

Lines changed: 41 additions & 109 deletions

File tree

riverdriver/riverdatabasesql/internal/dbsqlc/river_job.sql.go

Lines changed: 19 additions & 35 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

riverdriver/riverdatabasesql/river_database_sql.go

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -302,25 +302,7 @@ func (e *Executor) JobInsertUnique(ctx context.Context, params *riverdriver.JobI
302302
return nil, interpretError(err)
303303
}
304304

305-
jobRow, err := jobRowFromInternal(&dbsqlc.RiverJob{
306-
ID: insertRes.ID,
307-
Args: insertRes.Args,
308-
Attempt: insertRes.Attempt,
309-
AttemptedAt: insertRes.AttemptedAt,
310-
AttemptedBy: insertRes.AttemptedBy,
311-
CreatedAt: insertRes.CreatedAt,
312-
Errors: insertRes.Errors,
313-
FinalizedAt: insertRes.FinalizedAt,
314-
Kind: insertRes.Kind,
315-
MaxAttempts: insertRes.MaxAttempts,
316-
Metadata: insertRes.Metadata,
317-
Priority: insertRes.Priority,
318-
Queue: insertRes.Queue,
319-
ScheduledAt: insertRes.ScheduledAt,
320-
State: insertRes.State,
321-
Tags: insertRes.Tags,
322-
UniqueKey: insertRes.UniqueKey,
323-
})
305+
jobRow, err := jobRowFromInternal(&insertRes.RiverJob)
324306
if err != nil {
325307
return nil, err
326308
}

riverdriver/riverpgxv5/internal/dbsqlc/river_job.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ INSERT INTO river_job(
316316
ON CONFLICT (kind, unique_key) WHERE unique_key IS NOT NULL
317317
-- Something needs to be updated for a row to be returned on a conflict.
318318
DO UPDATE SET kind = EXCLUDED.kind
319-
RETURNING *, (xmax != 0) AS unique_skipped_as_duplicate;
319+
RETURNING sqlc.embed(river_job), (xmax != 0) AS unique_skipped_as_duplicate;
320320

321321
-- Run by the rescuer to queue for retry or discard depending on job state.
322322
-- name: JobRescueMany :exec

riverdriver/riverpgxv5/internal/dbsqlc/river_job.sql.go

Lines changed: 19 additions & 35 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

riverdriver/riverpgxv5/river_pgx_v5_driver.go

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -296,25 +296,7 @@ func (e *Executor) JobInsertUnique(ctx context.Context, params *riverdriver.JobI
296296
return nil, interpretError(err)
297297
}
298298

299-
jobRow, err := jobRowFromInternal(&dbsqlc.RiverJob{
300-
ID: insertRes.ID,
301-
Args: insertRes.Args,
302-
Attempt: insertRes.Attempt,
303-
AttemptedAt: insertRes.AttemptedAt,
304-
AttemptedBy: insertRes.AttemptedBy,
305-
CreatedAt: insertRes.CreatedAt,
306-
Errors: insertRes.Errors,
307-
FinalizedAt: insertRes.FinalizedAt,
308-
Kind: insertRes.Kind,
309-
MaxAttempts: insertRes.MaxAttempts,
310-
Metadata: insertRes.Metadata,
311-
Priority: insertRes.Priority,
312-
Queue: insertRes.Queue,
313-
ScheduledAt: insertRes.ScheduledAt,
314-
State: insertRes.State,
315-
Tags: insertRes.Tags,
316-
UniqueKey: insertRes.UniqueKey,
317-
})
299+
jobRow, err := jobRowFromInternal(&insertRes.RiverJob)
318300
if err != nil {
319301
return nil, err
320302
}

0 commit comments

Comments
 (0)