summaryrefslogtreecommitdiff
path: root/select_test.go
diff options
context:
space:
mode:
authorStefan Majewsky <majewsky@gmx.net>2026-09-15 17:29:51 +0200
committerStefan Majewsky <majewsky@gmx.net>2026-09-15 17:31:33 +0200
commite6b575dfd03f0aa953823a48520dc30556705dee (patch)
tree77af27c4cfb2170d597ce8c5826902cd6270fa2a /select_test.go
parentdd50131298675f0abdbd749cf39320c9f53fed38 (diff)
downloadgo-oblast-e6b575dfd03f0aa953823a48520dc30556705dee.tar.gz
add func TupleSelect/TupleSelectOne/TupleSelectOneOrNone
Diffstat (limited to 'select_test.go')
-rw-r--r--select_test.go93
1 files changed, 93 insertions, 0 deletions
diff --git a/select_test.go b/select_test.go
index 5520948..6e99463 100644
--- a/select_test.go
+++ b/select_test.go
@@ -160,6 +160,39 @@ func TestSelectReturningSomeRecords(t *testing.T) {
name := must.Return(oblast.SelectOneOrNone[string](ctx, db, `SELECT name FROM basic_records WHERE id < ?`, 3))(t)
assert.Equal(t, name, Some("foo"))
})
+
+ type tupleRecord struct {
+ ID int64
+ Name string
+ }
+ commonSetupForTupleSelect := func() {
+ md.ForQuery(`SELECT id, name FROM basic_records WHERE id < ?`).
+ ExpectQueryWithArgs(3).
+ AndReturnColumns("id", "name").
+ WithRow(1, "foo").
+ WithRow(2, "bar")
+ }
+
+ t.Run("using TupleSelect", func(t *testing.T) {
+ commonSetupForTupleSelect()
+ records := must.Return(oblast.TupleSelect[tupleRecord](ctx, db, `SELECT id, name FROM basic_records WHERE id < ?`, 3).Collect())(t)
+ assert.Equal(t, records, []tupleRecord{
+ {1, "foo"},
+ {2, "bar"},
+ })
+ })
+
+ t.Run("using TupleSelectOne", func(t *testing.T) {
+ commonSetupForTupleSelect()
+ record := must.Return(oblast.TupleSelectOne[tupleRecord](ctx, db, `SELECT id, name FROM basic_records WHERE id < ?`, 3))(t)
+ assert.Equal(t, record, tupleRecord{1, "foo"})
+ })
+
+ t.Run("using TupleSelectOneOrNone", func(t *testing.T) {
+ commonSetupForTupleSelect()
+ record := must.Return(oblast.TupleSelectOneOrNone[tupleRecord](ctx, db, `SELECT id, name FROM basic_records WHERE id < ?`, 3))(t)
+ assert.Equal(t, record, Some(tupleRecord{1, "foo"}))
+ })
}
func TestSelectReturningNoRecords(t *testing.T) {
@@ -275,6 +308,34 @@ func TestSelectReturningNoRecords(t *testing.T) {
name := must.Return(oblast.SelectOneOrNone[string](ctx, db, `SELECT name FROM basic_records WHERE id < ?`, 3))(t)
assert.Equal(t, name, None[string]())
})
+
+ type tupleRecord struct {
+ ID int64
+ Name string
+ }
+ commonSetupForTupleSelect := func() {
+ md.ForQuery(`SELECT id, name FROM basic_records WHERE id < ?`).
+ ExpectQueryWithArgs(3).
+ AndReturnColumns("id", "name")
+ }
+
+ t.Run("using TupleSelect", func(t *testing.T) {
+ commonSetupForTupleSelect()
+ records := must.Return(oblast.TupleSelect[tupleRecord](ctx, db, `SELECT id, name FROM basic_records WHERE id < ?`, 3).Collect())(t)
+ assert.Equal(t, records, nil)
+ })
+
+ t.Run("using TupleSelectOne", func(t *testing.T) {
+ commonSetupForTupleSelect()
+ _, err := oblast.TupleSelectOne[tupleRecord](ctx, db, `SELECT id, name FROM basic_records WHERE id < ?`, 3)
+ assert.ErrEqual(t, err, sql.ErrNoRows.Error())
+ })
+
+ t.Run("using TupleSelectOneOrNone", func(t *testing.T) {
+ commonSetupForTupleSelect()
+ record := must.Return(oblast.TupleSelectOneOrNone[tupleRecord](ctx, db, `SELECT id, name FROM basic_records WHERE id < ?`, 3))(t)
+ assert.Equal(t, record, None[tupleRecord]())
+ })
}
func TestSelectIntoUnexpectedField(t *testing.T) {
@@ -546,6 +607,21 @@ func TestSelectCapturingQueryError(t *testing.T) {
_, err := oblast.SelectOne[string](ctx, db, `SELECT name FROM basic_records WHERE id < ?`, 3)
assert.ErrEqual(t, err, "unexpected query: SELECT name FROM basic_records WHERE id < ?")
})
+
+ type tupleRecord struct {
+ ID int64
+ Name string
+ }
+
+ t.Run("using oblast.TupleSelect", func(t *testing.T) {
+ _, err := oblast.TupleSelect[tupleRecord](ctx, db, `SELECT id, name FROM basic_records WHERE id < ?`, 3).Collect()
+ assert.ErrEqual(t, err, "during Query(): unexpected query: SELECT id, name FROM basic_records WHERE id < ?")
+ })
+
+ t.Run("using oblast.TupleSelectOne", func(t *testing.T) {
+ _, err := oblast.TupleSelectOne[tupleRecord](ctx, db, `SELECT id, name FROM basic_records WHERE id < ?`, 3)
+ assert.ErrEqual(t, err, "during Query(): unexpected query: SELECT id, name FROM basic_records WHERE id < ?")
+ })
}
func TestSelectCapturingCloseError(t *testing.T) {
@@ -610,6 +686,23 @@ func TestSelectCapturingCloseError(t *testing.T) {
assert.ErrEqual(t, err, "datacenter on fire")
})
+ type tupleRecord struct {
+ ID int64
+ Name string
+ }
+
+ t.Run("using oblast.TupleSelect", func(t *testing.T) {
+ commonSetup(`SELECT id, name FROM basic_records WHERE id < ?`)
+ _, err := oblast.TupleSelect[tupleRecord](ctx, db, `SELECT id, name FROM basic_records WHERE id < ?`, 3).Collect()
+ assert.ErrEqual(t, err, "datacenter on fire")
+ })
+
+ t.Run("using oblast.TupleSelectOne", func(t *testing.T) {
+ commonSetup(`SELECT id, name FROM basic_records WHERE id < ?`)
+ _, err := oblast.TupleSelectOne[tupleRecord](ctx, db, `SELECT id, name FROM basic_records WHERE id < ?`, 3)
+ assert.ErrEqual(t, err, "datacenter on fire")
+ })
+
commonSetup = func(query string) {
md.ForQuery(query).
ExpectQueryWithArgs(3).