Fix Scanner that does not read entire value
This commit is contained in:
@@ -153,6 +153,7 @@ func (rows *Rows) Next() bool {
|
|||||||
|
|
||||||
rows.rowCount++
|
rows.rowCount++
|
||||||
rows.columnIdx = 0
|
rows.columnIdx = 0
|
||||||
|
rows.vr = ValueReader{}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
t, r, err := rows.conn.rxMsg()
|
t, r, err := rows.conn.rxMsg()
|
||||||
|
|||||||
+9
-10
@@ -223,31 +223,30 @@ func TestArrayDecoding(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type buggyScanner struct {}
|
type shortScanner struct{}
|
||||||
|
|
||||||
func (*buggyScanner) Scan(r *pgx.ValueReader) error {
|
func (*shortScanner) Scan(r *pgx.ValueReader) error {
|
||||||
r.ReadInt32()
|
r.ReadByte()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestBuggyScanner(t *testing.T) {
|
func TestShortScanner(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
conn := mustConnect(t, *defaultConnConfig)
|
conn := mustConnect(t, *defaultConnConfig)
|
||||||
defer closeConn(t, conn)
|
defer closeConn(t, conn)
|
||||||
|
|
||||||
rows, err := conn.Query("select 'tevvvvvzvzst', array[]::text[] union select 'ko', array[]::text[]")
|
rows, err := conn.Query("select 'ab', 'cd' union select 'cd', 'ef'")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf(`error retrieving rows with array: %v`, err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
|
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
var s string
|
var s1, s2 shortScanner
|
||||||
var b buggyScanner
|
err = rows.Scan(&s1, &s2)
|
||||||
err = rows.Scan(&s, &b)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf(`error reading array: %v`, err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user