internal/database: add CollectInts
A CollectInts function is added as a shortcut for fetching IDs from a
single column.
Change-Id: Ide61b936382545a73dd9e7c623b6d26364cc8608
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/349895
Trust: Julie Qiu <julie@golang.org>
Run-TryBot: Julie Qiu <julie@golang.org>
TryBot-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Jamal Carvalho <jamal@golang.org>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
diff --git a/internal/database/database.go b/internal/database/database.go
index ddfd074..c644334 100644
--- a/internal/database/database.go
+++ b/internal/database/database.go
@@ -538,6 +538,24 @@
)
}
+// CollectInts runs the query, which must select for a single INTEGER or BIGINT
+// column, and returns a slice of the resulting ints.
+func (db *DB) CollectInts(ctx context.Context, query string, args ...interface{}) (ints []int, err error) {
+ defer derrors.WrapStack(&err, "DB.CollectInts(%q)", query)
+ err = db.RunQuery(ctx, query, func(rows *sql.Rows) error {
+ var i int
+ if err := rows.Scan(&i); err != nil {
+ return err
+ }
+ ints = append(ints, i)
+ return nil
+ }, args...)
+ if err != nil {
+ return nil, err
+ }
+ return ints, nil
+}
+
// CollectStrings runs the query, which must select for a single string column, and returns
// a slice of the resulting strings.
func (db *DB) CollectStrings(ctx context.Context, query string, args ...interface{}) (ss []string, err error) {