aboutsummaryrefslogtreecommitdiff
path: root/oblast.go
diff options
context:
space:
mode:
Diffstat (limited to 'oblast.go')
-rw-r--r--oblast.go19
1 files changed, 19 insertions, 0 deletions
diff --git a/oblast.go b/oblast.go
index 52c0cfd..42305e6 100644
--- a/oblast.go
+++ b/oblast.go
@@ -100,6 +100,7 @@ import (
"database/sql/driver"
"fmt"
"reflect"
+ "strings"
)
var (
@@ -170,3 +171,21 @@ func MustNewStore[R any](dialect Dialect, opts ...PlanOption) Store[R] {
}
return store
}
+
+// MissingRecordError is returned by [Store.Update] if one of the rows to be updated does not exist in the DB.
+type MissingRecordError[R any] struct {
+ // The record that was provided to [Store.Update],
+ // but for which no row with the same primary key values could be located.
+ Record R
+ plan plan
+}
+
+// Error implements the builtin/error interface.
+func (e MissingRecordError[R]) Error() string {
+ keyDescs := make([]string, len(e.plan.PrimaryKeyColumnNames))
+ v := reflect.ValueOf(e.Record)
+ for idx, columnName := range e.plan.PrimaryKeyColumnNames {
+ keyDescs[idx] = fmt.Sprintf("%s = %#v", columnName, v.FieldByIndex(e.plan.IndexByColumnName[columnName]))
+ }
+ return fmt.Sprintf("could not UPDATE record that does not exist in the database: %s", strings.Join(keyDescs, ", "))
+}