aboutsummaryrefslogtreecommitdiff
path: root/testing/pgruntime/helpers_test.go
diff options
context:
space:
mode:
authorStefan Majewsky <majewsky@gmx.net>2026-08-01 14:49:15 +0200
committerStefan Majewsky <majewsky@gmx.net>2026-08-01 14:49:49 +0200
commit6d72c85766a8355e1d660ff0c19b43e93faad4d8 (patch)
tree118c3cbdf43a9d4355ece98ea70bd184630b4e1c /testing/pgruntime/helpers_test.go
parente26a214de3958e48e94cdac0e1ae0641e3221deb (diff)
downloadgo-gg-6d72c85766a8355e1d660ff0c19b43e93faad4d8.tar.gz
add testing/pgruntime
Testing pgruntime has quickly turned out to be a nightmare, because so many parts of the test logic are not easily reproducible (e.g. `stopDBIfLingering`). I decided to not waste a bunch of time testing code that is relatively compact and easy to verify by careful examination, and that is unlikely to change a lot in the future.
Diffstat (limited to 'testing/pgruntime/helpers_test.go')
-rw-r--r--testing/pgruntime/helpers_test.go47
1 files changed, 47 insertions, 0 deletions
diff --git a/testing/pgruntime/helpers_test.go b/testing/pgruntime/helpers_test.go
new file mode 100644
index 0000000..ca4ffd2
--- /dev/null
+++ b/testing/pgruntime/helpers_test.go
@@ -0,0 +1,47 @@
+// SPDX-FileCopyrightText: 2026 Stefan Majewsky <majewsky@gmx.net>
+// SPDX-License-Identifier: Apache-2.0
+
+package pgruntime_test
+
+import (
+ "context"
+ "database/sql"
+
+ "go.xyrillian.de/gg/errext"
+ "go.xyrillian.de/gg/gsql"
+)
+
+// Convenience function for executing a one-off SQL query returning no rows.
+// TODO: move to gsql
+func execQuery(ctx context.Context, db gsql.Handle, query string, args []any) (sql.Result, error) {
+ stmt, err := db.GSQLPrepare(ctx, query, false)
+ if err != nil {
+ return nil, err
+ }
+ result, err := stmt.Exec(ctx, args)
+ return result, errext.WithCleanup(err, "stmt.Close", stmt.Close())
+}
+
+// Convenience function for executing a one-off SQL query returning one row.
+func queryRow(ctx context.Context, db gsql.Handle, query string, args, slots []any) error {
+ stmt, err := db.GSQLPrepare(ctx, query, false)
+ if err != nil {
+ return err
+ }
+ err = stmt.QueryRow(ctx, args, slots)
+ return errext.WithCleanup(err, "stmt.Close", stmt.Close())
+}
+
+// Convenience function for executing a one-off SQL query returning one value.
+// TODO: move to gsql
+func selectOneValue[T any](ctx context.Context, db gsql.Handle, query string, args ...any) (T, error) {
+ stmt, err := db.GSQLPrepare(ctx, query, false)
+ if err != nil {
+ var none T
+ return none, err
+ }
+
+ var result T
+ err = stmt.QueryRow(ctx, args, []any{&result})
+ return result, errext.WithCleanup(err, "stmt.Close", stmt.Close())
+}