@@ -1508,6 +1508,50 @@ static Func<NpgsqlDataReader, int, Task<Stream>> BuildStreamGetter(bool isAsync)
15081508 ? ( Func < NpgsqlDataReader , int , Task < Stream > > ) ( ( r , index ) => r . GetStreamAsync ( index ) )
15091509 : ( r , index ) => Task . FromResult ( r . GetStream ( index ) ) ;
15101510
1511+ [ Test , IssueLink ( "https://github.com/npgsql/npgsql/issues/5223" ) ]
1512+ public async Task GetStream_seek ( )
1513+ {
1514+ // Sequential doesn't allow to seek
1515+ if ( IsSequential )
1516+ return ;
1517+
1518+ await using var conn = await OpenConnectionAsync ( ) ;
1519+ await using var cmd = conn . CreateCommand ( ) ;
1520+ cmd . CommandText = "SELECT 'abcdefgh'" ;
1521+ await using var reader = await cmd . ExecuteReaderAsync ( ) ;
1522+ await reader . ReadAsync ( ) ;
1523+
1524+ var buffer = new byte [ 4 ] ;
1525+
1526+ await using var stream = reader . GetStream ( 0 ) ;
1527+ Assert . IsTrue ( stream . CanSeek ) ;
1528+
1529+ var seekPosition = stream . Seek ( - 1 , SeekOrigin . End ) ;
1530+ Assert . That ( seekPosition , Is . EqualTo ( stream . Length - 1 ) ) ;
1531+ var read = stream . Read ( buffer ) ;
1532+ Assert . That ( read , Is . EqualTo ( 1 ) ) ;
1533+ Assert . That ( Encoding . ASCII . GetString ( buffer , 0 , 1 ) , Is . EqualTo ( "h" ) ) ;
1534+ read = stream . Read ( buffer ) ;
1535+ Assert . That ( read , Is . EqualTo ( 0 ) ) ;
1536+
1537+ seekPosition = stream . Seek ( 2 , SeekOrigin . Begin ) ;
1538+ Assert . That ( seekPosition , Is . EqualTo ( 2 ) ) ;
1539+ read = stream . Read ( buffer ) ;
1540+ Assert . That ( read , Is . EqualTo ( buffer . Length ) ) ;
1541+ Assert . That ( Encoding . ASCII . GetString ( buffer ) , Is . EqualTo ( "cdef" ) ) ;
1542+
1543+ seekPosition = stream . Seek ( - 3 , SeekOrigin . Current ) ;
1544+ Assert . That ( seekPosition , Is . EqualTo ( 3 ) ) ;
1545+ read = stream . Read ( buffer ) ;
1546+ Assert . That ( read , Is . EqualTo ( buffer . Length ) ) ;
1547+ Assert . That ( Encoding . ASCII . GetString ( buffer ) , Is . EqualTo ( "defg" ) ) ;
1548+
1549+ stream . Position = 1 ;
1550+ read = stream . Read ( buffer ) ;
1551+ Assert . That ( read , Is . EqualTo ( buffer . Length ) ) ;
1552+ Assert . That ( Encoding . ASCII . GetString ( buffer ) , Is . EqualTo ( "bcde" ) ) ;
1553+ }
1554+
15111555 #endregion GetBytes / GetStream
15121556
15131557 #region GetChars / GetTextReader
0 commit comments