|  | 
| 7 | 7 | 	"fmt" | 
| 8 | 8 | 	"os" | 
| 9 | 9 | 	"reflect" | 
|  | 10 | +	"strconv" | 
| 10 | 11 | 	"strings" | 
| 11 | 12 | 	"testing" | 
| 12 | 13 | 	"time" | 
| @@ -300,6 +301,39 @@ func TestRowsScanDoesNotAllowScanningBinaryFormatValuesIntoString(t *testing.T) | 
| 300 | 301 | 	ensureConnValid(t, conn) | 
| 301 | 302 | } | 
| 302 | 303 | 
 | 
|  | 304 | +func TestConnQueryRawValues(t *testing.T) { | 
|  | 305 | +	t.Parallel() | 
|  | 306 | + | 
|  | 307 | +	conn := mustConnectString(t, os.Getenv("PGX_TEST_DATABASE")) | 
|  | 308 | +	defer closeConn(t, conn) | 
|  | 309 | + | 
|  | 310 | +	var rowCount int32 | 
|  | 311 | + | 
|  | 312 | +	rows, err := conn.Query( | 
|  | 313 | +		context.Background(), | 
|  | 314 | +		"select 'foo'::text, 'bar'::varchar, n, null, n from generate_series(1,$1) n", | 
|  | 315 | +		pgx.QuerySimpleProtocol(true), | 
|  | 316 | +		10, | 
|  | 317 | +	) | 
|  | 318 | +	require.NoError(t, err) | 
|  | 319 | +	defer rows.Close() | 
|  | 320 | + | 
|  | 321 | +	for rows.Next() { | 
|  | 322 | +		rowCount++ | 
|  | 323 | + | 
|  | 324 | +		rawValues := rows.RawValues() | 
|  | 325 | +		assert.Len(t, rawValues, 5) | 
|  | 326 | +		assert.Equal(t, "foo", string(rawValues[0])) | 
|  | 327 | +		assert.Equal(t, "bar", string(rawValues[1])) | 
|  | 328 | +		assert.Equal(t, strconv.FormatInt(int64(rowCount), 10), string(rawValues[2])) | 
|  | 329 | +		assert.Nil(t, rawValues[3]) | 
|  | 330 | +		assert.Equal(t, strconv.FormatInt(int64(rowCount), 10), string(rawValues[4])) | 
|  | 331 | +	} | 
|  | 332 | + | 
|  | 333 | +	require.NoError(t, rows.Err()) | 
|  | 334 | +	assert.EqualValues(t, 10, rowCount) | 
|  | 335 | +} | 
|  | 336 | + | 
| 303 | 337 | // Test that a connection stays valid when query results are closed early | 
| 304 | 338 | func TestConnQueryCloseEarly(t *testing.T) { | 
| 305 | 339 | 	t.Parallel() | 
|  | 
0 commit comments