aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Majewsky <majewsky@gmx.net>2026-04-17 16:55:31 +0200
committerStefan Majewsky <majewsky@gmx.net>2026-04-17 16:55:31 +0200
commit6067fae668d8c5ca7d81874ddf258e0a73b69112 (patch)
tree470fe83a53d78ea1a56aea52ef3c89c854d06de2
parentd04dfa3bc58c86149064bbca672b42f660a4aebd (diff)
downloadgo-oblast-6067fae668d8c5ca7d81874ddf258e0a73b69112.tar.gz
remove more instances of defer()
-rw-r--r--query.go4
-rw-r--r--select.go16
2 files changed, 8 insertions, 12 deletions
diff --git a/query.go b/query.go
index bf1ea2d..c0f3942 100644
--- a/query.go
+++ b/query.go
@@ -139,7 +139,7 @@ func (s Store[R]) Insert(db Handle, records ...R) (returnedRecords []R, returned
// Returns [MissingRecordError] if any of the records does not exist in the database, that is, if for any of the records, the database contains no row with the same primary key values.
//
// Returns an error if [NewStore] was called without the [TableNameIs] or [PrimaryKeyIs] options, which are both required to generate a query for this method.
-func (s Store[R]) Update(db Handle, records ...R) (returnedError error) {
+func (s Store[R]) Update(db Handle, records ...R) error {
// NOTE: This function body should be as short as possible to reduce the binary size after monomorphization.
// Any expression that does not depend on type R should be factored out into a reusable function.
@@ -184,7 +184,7 @@ func updateRecord(v reflect.Value, recordIndex int, stmt preparedStatement, argu
// Delete executes an SQL DELETE statement for each of the provided records, using their primary keys to locate the respective table rows.
//
// Returns an error if [NewStore] was called without the [TableNameIs] or [PrimaryKeyIs] options, which are both required to generate a query for this method.
-func (s Store[R]) Delete(db Handle, records ...R) (returnedError error) {
+func (s Store[R]) Delete(db Handle, records ...R) error {
// NOTE: This function body should be as short as possible to reduce the binary size after monomorphization.
// Any expression that does not depend on type R should be factored out into a reusable function.
// TODO: minimize
diff --git a/select.go b/select.go
index 6073ce6..3676bd5 100644
--- a/select.go
+++ b/select.go
@@ -73,31 +73,27 @@ func (s Store[R]) SelectWhere(db Handle, partialQuery string, args ...any) ([]R,
return result, newIOError(err, "Rows.Err", rows.Err())
}
-func startSelectQuery(db Handle, plan plan, query string, args ...any) (returnedRows *sql.Rows, indexes [][]int, returnedError error) {
+func startSelectQuery(db Handle, plan plan, query string, args ...any) (*sql.Rows, [][]int, error) {
rows, err := db.Query(query, args...)
if err != nil {
return nil, nil, fmt.Errorf("during Query(): %w", err)
}
- defer func() {
- if returnedError != nil {
- // NOTE: Not `returnedRows.Close()`! We may have `rows != nil && returnedRows == nil`.
- returnedError = newIOError(returnedError, "Rows.Close", rows.Close())
- }
- }()
columnNames, err := rows.Columns()
if err != nil {
- return nil, nil, fmt.Errorf("during rows.Columns(): %w", err)
+ err = fmt.Errorf("during rows.Columns(): %w", err)
+ return nil, nil, newIOError(err, "Rows.Close", rows.Close())
}
- indexes = make([][]int, len(columnNames))
+ indexes := make([][]int, len(columnNames))
for idx, columnName := range columnNames {
var ok bool
indexes[idx], ok = plan.IndexByColumnName[columnName]
if !ok {
- return nil, nil, fmt.Errorf(
+ err := fmt.Errorf(
"result has column %q in position %d, but no field in type %s has `db:%[1]q`",
columnName, idx, plan.TypeName,
)
+ return nil, nil, newIOError(err, "Rows.Close", rows.Close())
}
}