Skip to content

Commit 1c1c851

Browse files
authored
Drop driver's Executor.Exec first return value (which is empty) (#936)
Here, drop the first return value of the driver's `Executor.Exec` function, which previously returned a `struct{}` in first position. When I was first putting this all in, I figured it'd be better for consistency if all driver functions returned exactly two values, even if one wasn't really needed. Since then, we've picked up lots of driver functions that return only an error, so that original premise doesn't hold anymore. Returning only an error is advantageous in some cases because it lets the return value be passed directly into functions. e.g. require.NoError(t, exec.Exec(ctx, ...)) I've been meaning to make this change for a while, and it seems like a good time now given we're going to be making lots of changes to the driver interface for the next release anyway.
1 parent c4abc28 commit 1c1c851

10 files changed

Lines changed: 22 additions & 37 deletions

File tree

client.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -909,8 +909,7 @@ func (c *Client[TTx]) Start(ctx context.Context) error {
909909
// available, the client appears to have started even though it's completely
910910
// non-functional. Here we try to make an initial assessment of health and
911911
// return quickly in case of an apparent problem.
912-
_, err := c.driver.GetExecutor().Exec(fetchCtx, "SELECT 1")
913-
if err != nil {
912+
if err := c.driver.GetExecutor().Exec(fetchCtx, "SELECT 1"); err != nil {
914913
return fmt.Errorf("error making initial connection to database: %w", err)
915914
}
916915

cmd/river/riverbench/river_bench.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -486,14 +486,14 @@ func (b *Benchmarker[TTx]) resetJobsTable(ctx context.Context) error {
486486

487487
switch b.driver.DatabaseName() {
488488
case "postgres":
489-
if _, err := b.driver.GetExecutor().Exec(ctx, "VACUUM FULL river_job"); err != nil {
489+
if err := b.driver.GetExecutor().Exec(ctx, "VACUUM FULL river_job"); err != nil {
490490
return fmt.Errorf("error vacuuming: %w", err)
491491
}
492492
case "sqlite":
493493
// SQLite doesn't support `VACUUM FULL`, nor does it support vacuuming
494494
// on a per-table basis. `VACUUM` vacuums the entire schema, which is
495495
// okay in this case.
496-
if _, err := b.driver.GetExecutor().Exec(ctx, "VACUUM"); err != nil {
496+
if err := b.driver.GetExecutor().Exec(ctx, "VACUUM"); err != nil {
497497
return fmt.Errorf("error vacuuming: %w", err)
498498
}
499499
default:

internal/riverinternaltest/riverdrivertest/riverdrivertest.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -459,17 +459,15 @@ func Exercise[TTx any](ctx context.Context, t *testing.T,
459459

460460
exec, _ := setup(ctx, t)
461461

462-
_, err := exec.Exec(ctx, "SELECT 1 + 2")
463-
require.NoError(t, err)
462+
require.NoError(t, exec.Exec(ctx, "SELECT 1 + 2"))
464463
})
465464

466465
t.Run("WithArgs", func(t *testing.T) {
467466
t.Parallel()
468467

469468
exec, _ := setup(ctx, t)
470469

471-
_, err := exec.Exec(ctx, "SELECT $1 || $2", "foo", "bar")
472-
require.NoError(t, err)
470+
require.NoError(t, exec.Exec(ctx, "SELECT $1 || $2", "foo", "bar"))
473471
})
474472
})
475473

internal/util/dbutil/db_util_test.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@ func TestWithTx(t *testing.T) {
2020
driver := riverpgxv5.New(nil)
2121

2222
err := dbutil.WithTx(ctx, driver.UnwrapExecutor(tx), func(ctx context.Context, execTx riverdriver.ExecutorTx) error {
23-
_, err := execTx.Exec(ctx, "SELECT 1")
24-
require.NoError(t, err)
25-
23+
require.NoError(t, execTx.Exec(ctx, "SELECT 1"))
2624
return nil
2725
})
2826
require.NoError(t, err)
@@ -36,9 +34,7 @@ func TestWithTxV(t *testing.T) {
3634
driver := riverpgxv5.New(nil)
3735

3836
ret, err := dbutil.WithTxV(ctx, driver.UnwrapExecutor(tx), func(ctx context.Context, execTx riverdriver.ExecutorTx) (int, error) {
39-
_, err := execTx.Exec(ctx, "SELECT 1")
40-
require.NoError(t, err)
41-
37+
require.NoError(t, execTx.Exec(ctx, "SELECT 1"))
4238
return 7, nil
4339
})
4440
require.NoError(t, err)

riverdriver/river_driver_interface.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ type Executor interface {
181181
ColumnExists(ctx context.Context, params *ColumnExistsParams) (bool, error)
182182

183183
// Exec executes raw SQL. Used for migrations.
184-
Exec(ctx context.Context, sql string, args ...any) (struct{}, error)
184+
Exec(ctx context.Context, sql string, args ...any) error
185185

186186
JobCancel(ctx context.Context, params *JobCancelParams) (*rivertype.JobRow, error)
187187
JobCountByState(ctx context.Context, params *JobCountByStateParams) (int, error)

riverdriver/riverdatabasesql/river_database_sql_driver.go

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -134,9 +134,9 @@ func (e *Executor) ColumnExists(ctx context.Context, params *riverdriver.ColumnE
134134
return exists, interpretError(err)
135135
}
136136

137-
func (e *Executor) Exec(ctx context.Context, sql string, args ...any) (struct{}, error) {
137+
func (e *Executor) Exec(ctx context.Context, sql string, args ...any) error {
138138
_, err := e.dbtx.ExecContext(ctx, sql, args...)
139-
return struct{}{}, interpretError(err)
139+
return interpretError(err)
140140
}
141141

142142
func (e *Executor) JobCancel(ctx context.Context, params *riverdriver.JobCancelParams) (*rivertype.JobRow, error) {
@@ -909,8 +909,7 @@ func (t *ExecutorSubTx) Begin(ctx context.Context) (riverdriver.ExecutorTx, erro
909909
}
910910

911911
nextSavepointNum := t.savepointNum + 1
912-
_, err := t.Exec(ctx, fmt.Sprintf("SAVEPOINT %s%02d", savepointPrefix, nextSavepointNum))
913-
if err != nil {
912+
if err := t.Exec(ctx, fmt.Sprintf("SAVEPOINT %s%02d", savepointPrefix, nextSavepointNum)); err != nil {
914913
return nil, err
915914
}
916915

@@ -926,8 +925,7 @@ func (t *ExecutorSubTx) Commit(ctx context.Context) error {
926925

927926
// Release destroys a savepoint, keeping all the effects of commands that
928927
// were run within it (so it's effectively COMMIT for savepoints).
929-
_, err := t.Exec(ctx, fmt.Sprintf("RELEASE %s%02d", savepointPrefix, t.savepointNum))
930-
if err != nil {
928+
if err := t.Exec(ctx, fmt.Sprintf("RELEASE %s%02d", savepointPrefix, t.savepointNum)); err != nil {
931929
return err
932930
}
933931

@@ -941,8 +939,7 @@ func (t *ExecutorSubTx) Rollback(ctx context.Context) error {
941939
return errors.New("tx is closed") // mirrors pgx's behavior for this condition
942940
}
943941

944-
_, err := t.Exec(ctx, fmt.Sprintf("ROLLBACK TO %s%02d", savepointPrefix, t.savepointNum))
945-
if err != nil {
942+
if err := t.Exec(ctx, fmt.Sprintf("ROLLBACK TO %s%02d", savepointPrefix, t.savepointNum)); err != nil {
946943
return err
947944
}
948945

riverdriver/riverpgxv5/river_pgx_v5_driver.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,9 @@ func (e *Executor) ColumnExists(ctx context.Context, params *riverdriver.ColumnE
143143
return exists, interpretError(err)
144144
}
145145

146-
func (e *Executor) Exec(ctx context.Context, sql string, args ...any) (struct{}, error) {
146+
func (e *Executor) Exec(ctx context.Context, sql string, args ...any) error {
147147
_, err := e.dbtx.Exec(ctx, sql, args...)
148-
return struct{}{}, interpretError(err)
148+
return interpretError(err)
149149
}
150150

151151
func (e *Executor) JobCancel(ctx context.Context, params *riverdriver.JobCancelParams) (*rivertype.JobRow, error) {

riverdriver/riversqlite/river_sqlite_driver.go

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -182,9 +182,9 @@ func (e *Executor) ColumnExists(ctx context.Context, params *riverdriver.ColumnE
182182
return exists > 0, nil
183183
}
184184

185-
func (e *Executor) Exec(ctx context.Context, sql string, args ...any) (struct{}, error) {
185+
func (e *Executor) Exec(ctx context.Context, sql string, args ...any) error {
186186
_, err := e.dbtx.ExecContext(ctx, sql, args...)
187-
return struct{}{}, interpretError(err)
187+
return interpretError(err)
188188
}
189189

190190
func (e *Executor) JobCancel(ctx context.Context, params *riverdriver.JobCancelParams) (*rivertype.JobRow, error) {
@@ -1256,8 +1256,7 @@ func (t *ExecutorSubTx) Begin(ctx context.Context) (riverdriver.ExecutorTx, erro
12561256
}
12571257

12581258
nextSavepointNum := t.savepointNum + 1
1259-
_, err := t.Exec(ctx, fmt.Sprintf("SAVEPOINT %s%02d", savepointPrefix, nextSavepointNum))
1260-
if err != nil {
1259+
if err := t.Exec(ctx, fmt.Sprintf("SAVEPOINT %s%02d", savepointPrefix, nextSavepointNum)); err != nil {
12611260
return nil, err
12621261
}
12631262

@@ -1276,8 +1275,7 @@ func (t *ExecutorSubTx) Commit(ctx context.Context) error {
12761275

12771276
// Release destroys a savepoint, keeping all the effects of commands that
12781277
// were run within it (so it's effectively COMMIT for savepoints).
1279-
_, err := t.Exec(ctx, fmt.Sprintf("RELEASE %s%02d", savepointPrefix, t.savepointNum))
1280-
if err != nil {
1278+
if err := t.Exec(ctx, fmt.Sprintf("RELEASE %s%02d", savepointPrefix, t.savepointNum)); err != nil {
12811279
return err
12821280
}
12831281

@@ -1291,8 +1289,7 @@ func (t *ExecutorSubTx) Rollback(ctx context.Context) error {
12911289
return errors.New("tx is closed") // mirrors pgx's behavior for this condition
12921290
}
12931291

1294-
_, err := t.Exec(ctx, fmt.Sprintf("ROLLBACK TO %s%02d", savepointPrefix, t.savepointNum))
1295-
if err != nil {
1292+
if err := t.Exec(ctx, fmt.Sprintf("ROLLBACK TO %s%02d", savepointPrefix, t.savepointNum)); err != nil {
12961293
return err
12971294
}
12981295

rivermigrate/river_migrate.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -602,8 +602,7 @@ func (m *Migrator[TTx]) applyMigrations(ctx context.Context, exec riverdriver.Ex
602602
// a commit on a preexisting operation (such as adding an enum value to be
603603
// used in an immutable function) cannot succeed.
604604
err := dbutil.WithTx(ctx, exec, func(ctx context.Context, exec riverdriver.ExecutorTx) error {
605-
_, err := exec.Exec(ctx, sql)
606-
if err != nil {
605+
if err := exec.Exec(ctx, sql); err != nil {
607606
return fmt.Errorf("error applying version %03d [%s]: %w",
608607
versionBundle.Version, strings.ToUpper(string(direction)), err)
609608
}

rivermigrate/river_migrate_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -972,8 +972,7 @@ func buildTestMigrationsBundle(t *testing.T) *testMigrationsBundle {
972972
// continue to use the original transaction.
973973
func dbExecError(ctx context.Context, exec riverdriver.Executor, sql string) error {
974974
return dbutil.WithTx(ctx, exec, func(ctx context.Context, exec riverdriver.ExecutorTx) error {
975-
_, err := exec.Exec(ctx, sql)
976-
return err
975+
return exec.Exec(ctx, sql)
977976
})
978977
}
979978

0 commit comments

Comments
 (0)