Add QRM error if result set is empty when scanning into struct destination.

This commit is contained in:
go-jet 2019-10-10 16:09:44 +02:00
parent 02fafd8a7a
commit 8c9ae77cd8
6 changed files with 61 additions and 22 deletions

View file

@ -38,7 +38,7 @@ func Query(ctx context.Context, db DB, query string, args []interface{}, destPtr
}
if tempSliceValue.Len() == 0 {
return nil
return sql.ErrNoRows
}
structValue := reflect.ValueOf(destPtr).Elem()

View file

@ -516,7 +516,8 @@ func TestStringOperators(t *testing.T) {
fmt.Println(query.DebugSql())
err := query.Query(db, &struct{}{})
dest := []struct{}{}
err := query.Query(db, &dest)
assert.NilError(t, err)
}
@ -586,7 +587,8 @@ FROM test_sample.all_types;
`, "20:34:58", "23:06:06", "22:06:06.011", "21:06:06.011111", "20:16:06",
"19:26:06", "18:36:06", "17:46:06", "16:56:56", "15:16:46", "14:26:36")
err := query.Query(db, &struct{}{})
dest := []struct{}{}
err := query.Query(db, &dest)
assert.NilError(t, err)
}
@ -646,7 +648,8 @@ SELECT CAST(? AS DATE),
FROM test_sample.all_types;
`)
err := query.Query(db, &struct{}{})
dest := []struct{}{}
err := query.Query(db, &dest)
assert.NilError(t, err)
}
@ -708,7 +711,8 @@ SELECT all_types.date_time = all_types.date_time,
FROM test_sample.all_types;
`)
err := query.Query(db, &struct{}{})
dest := []struct{}{}
err := query.Query(db, &dest)
assert.NilError(t, err)
}
@ -769,7 +773,8 @@ SELECT all_types.timestamp = all_types.timestamp,
CURRENT_TIMESTAMP(2)
FROM test_sample.all_types;
`)
err := query.Query(db, &struct{}{})
dest := []struct{}{}
err := query.Query(db, &dest)
assert.NilError(t, err)
}

View file

@ -228,7 +228,8 @@ LIMIT ?;
testutils.AssertStatementSql(t, query, expectedSQL, int64(1), int64(1), int64(10), int64(1), int64(2), int64(1), int64(12))
err := query.Query(db, &struct{}{})
dest := []struct{}{}
err := query.Query(db, &dest)
assert.NilError(t, err)
}
@ -263,7 +264,8 @@ LIMIT ?;
testutils.AssertStatementSql(t, query2, expectedSQL, int64(1), int64(10), int64(1), int64(2), int64(1))
err := query.Query(db, &struct{}{})
dest := []struct{}{}
err := query.Query(db, &dest)
assert.NilError(t, err)
}
@ -305,7 +307,8 @@ OFFSET ?;
testutils.AssertStatementSql(t, query2, expectedSQL, int64(1), int64(10), int64(1), int64(2), int64(4), int64(3))
err := query.Query(db, &struct{}{})
dest := []struct{}{}
err := query.Query(db, &dest)
assert.NilError(t, err)
}
@ -510,7 +513,8 @@ SELECT true,
'date';
`)
err := query.Query(db, &struct{}{})
dest := []struct{}{}
err := query.Query(db, &dest)
assert.NilError(t, err)
}
@ -530,7 +534,8 @@ LOCK IN SHARE MODE;
testutils.AssertDebugStatementSql(t, query, expectedSQL)
err := query.Query(db, &struct{}{})
dest := []struct{}{}
err := query.Query(db, &dest)
assert.NilError(t, err)
}
@ -606,7 +611,8 @@ GROUP BY payment.amount, payment.customer_id, payment.payment_date;
testutils.AssertStatementSql(t, query, expectedSQL, 100, 100, int64(10))
err := query.Query(db, &struct{}{})
dest := []struct{}{}
err := query.Query(db, &dest)
assert.NilError(t, err)
}
@ -641,7 +647,8 @@ ORDER BY payment.customer_id;
testutils.AssertStatementSql(t, query, expectedSQL, int64(10))
err := query.Query(db, &struct{}{})
dest := []struct{}{}
err := query.Query(db, &dest)
assert.NilError(t, err)
}

View file

@ -170,7 +170,8 @@ func TestExpressionCast(t *testing.T) {
//fmt.Println(query.DebugSql())
err := query.Query(db, &struct{}{})
dest := []struct{}{}
err := query.Query(db, &dest)
assert.NilError(t, err)
}
@ -249,7 +250,8 @@ func TestStringOperators(t *testing.T) {
//fmt.Println(query.DebugSql())
err := query.Query(db, &struct{}{})
dest := []struct{}{}
err := query.Query(db, &dest)
assert.NilError(t, err)
}
@ -618,7 +620,8 @@ func TestTimeExpression(t *testing.T) {
//fmt.Println(query.DebugSql())
err := query.Query(db, &struct{}{})
dest := []struct{}{}
err := query.Query(db, &dest)
assert.NilError(t, err)
}

View file

@ -50,14 +50,16 @@ func TestScanToInvalidDestination(t *testing.T) {
func TestScanToValidDestination(t *testing.T) {
t.Run("pointer to struct", func(t *testing.T) {
err := query.Query(db, &struct{}{})
dest := []struct{}{}
err := query.Query(db, &dest)
assert.NilError(t, err)
})
t.Run("global query function scan", func(t *testing.T) {
queryStr, args := query.Sql()
err := qrm.Query(nil, db, queryStr, args, &struct{}{})
dest := []struct{}{}
err := qrm.Query(nil, db, queryStr, args, &dest)
assert.NilError(t, err)
})

View file

@ -1,6 +1,7 @@
package postgres
import (
"database/sql"
"fmt"
"github.com/go-jet/jet/internal/testutils"
. "github.com/go-jet/jet/postgres"
@ -162,7 +163,8 @@ LIMIT 12;
testutils.AssertDebugStatementSql(t, query, expectedSQL, int64(1), int64(1), int64(10), int64(1), int64(2), int64(1), int64(12))
err := query.Query(db, &struct{}{})
dest := []struct{}{}
err := query.Query(db, &dest)
assert.NilError(t, err)
}
@ -1617,7 +1619,8 @@ SELECT true,
'date';
`)
err := query.Query(db, &struct{}{})
dest := []struct{}{}
err := query.Query(db, &dest)
assert.NilError(t, err)
}
@ -1688,7 +1691,8 @@ GROUP BY payment.amount, payment.customer_id, payment.payment_date;
testutils.AssertStatementSql(t, query, expectedSQL, 100, 100, int64(10))
err := query.Query(db, &struct{}{})
dest := []struct{}{}
err := query.Query(db, &dest)
assert.NilError(t, err)
}
@ -1723,12 +1727,14 @@ ORDER BY payment.customer_id;
testutils.AssertStatementSql(t, query, expectedSQL, int64(10))
err := query.Query(db, &struct{}{})
dest := []struct{}{}
err := query.Query(db, &dest)
assert.NilError(t, err)
}
func TestSimpleView(t *testing.T) {
query := SELECT(
view.ActorInfo.AllColumns,
).
@ -1743,6 +1749,12 @@ func TestSimpleView(t *testing.T) {
FilmInfo string
}
//sql, args := query.Sql()
//
//row := db.QueryRow(sql, args...)
//
//row.Scan()
var dest []ActorInfo
err := query.Query(db, &dest)
@ -1786,3 +1798,13 @@ func TestJoinViewWithTable(t *testing.T) {
assert.Equal(t, len(dest[0].Rentals), 32)
assert.Equal(t, len(dest[1].Rentals), 27)
}
func TestErrNoRows(t *testing.T) {
query := SELECT(Customer.AllColumns).FROM(Customer).WHERE(Customer.CustomerID.EQ(Int(-1)))
customer := model.Customer{}
err := query.Query(db, &customer)
assert.Error(t, err, sql.ErrNoRows.Error())
}