@@ -129,7 +129,8 @@ public override long GetBytes(int ordinal, long dataOffset, byte[]? buffer, int
129129
130130 public override char GetChar ( int ordinal )
131131 {
132- return GetString ( ordinal ) [ 0 ] ;
132+ var str = GetString ( ordinal ) ;
133+ return str . Length == 0 ? throw new InvalidCastException ( "Could not read char - string was empty" ) : str [ 0 ] ;
133134 }
134135
135136 public override long GetChars ( int ordinal , long dataOffset , char [ ] ? buffer , int bufferOffset , int length )
@@ -208,7 +209,14 @@ public override decimal GetDecimal(int ordinal)
208209
209210 public override double GetDouble ( int ordinal )
210211 {
211- return GetFieldYdbValue ( ordinal ) . GetDouble ( ) ;
212+ var ydbValue = GetFieldYdbValue ( ordinal ) ;
213+
214+ return ydbValue . TypeId switch
215+ {
216+ YdbTypeId . Float => ydbValue . GetFloat ( ) ,
217+ YdbTypeId . Double => ydbValue . GetDouble ( ) ,
218+ _ => ThrowHelper . ThrowInvalidCast < double > ( ydbValue )
219+ } ;
212220 }
213221
214222 public override T GetFieldValue < T > ( int ordinal )
@@ -223,6 +231,11 @@ public override T GetFieldValue<T>(int ordinal)
223231 return ( T ) ( object ) GetStream ( ordinal ) ;
224232 }
225233
234+ if ( typeof ( T ) == typeof ( char ) )
235+ {
236+ return ( T ) ( object ) GetChar ( ordinal ) ;
237+ }
238+
226239 return base . GetFieldValue < T > ( ordinal ) ;
227240 }
228241
@@ -273,22 +286,55 @@ public override Guid GetGuid(int ordinal)
273286
274287 public override short GetInt16 ( int ordinal )
275288 {
276- return GetFieldYdbValue ( ordinal ) . GetInt16 ( ) ;
289+ var ydbValue = GetFieldYdbValue ( ordinal ) ;
290+
291+ return ydbValue . TypeId switch
292+ {
293+ YdbTypeId . Int8 => ydbValue . GetInt8 ( ) ,
294+ YdbTypeId . Int16 => ydbValue . GetInt16 ( ) ,
295+ YdbTypeId . Uint8 => ydbValue . GetUint8 ( ) ,
296+ _ => ThrowHelper . ThrowInvalidCast < short > ( ydbValue )
297+ } ;
277298 }
278299
279300 public ushort GetUint16 ( int ordinal )
280301 {
281- return GetFieldYdbValue ( ordinal ) . GetUint16 ( ) ;
302+ var ydbValue = GetFieldYdbValue ( ordinal ) ;
303+
304+ return ydbValue . TypeId switch
305+ {
306+ YdbTypeId . Uint8 => ydbValue . GetUint8 ( ) ,
307+ YdbTypeId . Uint16 => ydbValue . GetUint16 ( ) ,
308+ _ => ThrowHelper . ThrowInvalidCast < ushort > ( ydbValue )
309+ } ;
282310 }
283311
284312 public override int GetInt32 ( int ordinal )
285313 {
286- return GetFieldYdbValue ( ordinal ) . GetInt32 ( ) ;
314+ var ydbValue = GetFieldYdbValue ( ordinal ) ;
315+
316+ return ydbValue . TypeId switch
317+ {
318+ YdbTypeId . Int32 => ydbValue . GetInt32 ( ) ,
319+ YdbTypeId . Int8 => ydbValue . GetInt8 ( ) ,
320+ YdbTypeId . Int16 => ydbValue . GetInt16 ( ) ,
321+ YdbTypeId . Uint8 => ydbValue . GetUint8 ( ) ,
322+ YdbTypeId . Uint16 => ydbValue . GetUint16 ( ) ,
323+ _ => ThrowHelper . ThrowInvalidCast < int > ( ydbValue )
324+ } ;
287325 }
288326
289327 public uint GetUint32 ( int ordinal )
290328 {
291- return GetFieldYdbValue ( ordinal ) . GetUint32 ( ) ;
329+ var ydbValue = GetFieldYdbValue ( ordinal ) ;
330+
331+ return ydbValue . TypeId switch
332+ {
333+ YdbTypeId . Uint8 => ydbValue . GetUint8 ( ) ,
334+ YdbTypeId . Uint16 => ydbValue . GetUint16 ( ) ,
335+ YdbTypeId . Uint32 => ydbValue . GetUint32 ( ) ,
336+ _ => ThrowHelper . ThrowInvalidCast < uint > ( ydbValue )
337+ } ;
292338 }
293339
294340 public override long GetInt64 ( int ordinal )
@@ -301,13 +347,25 @@ public override long GetInt64(int ordinal)
301347 YdbTypeId . Int32 => ydbValue . GetInt32 ( ) ,
302348 YdbTypeId . Int8 => ydbValue . GetInt8 ( ) ,
303349 YdbTypeId . Int16 => ydbValue . GetInt16 ( ) ,
350+ YdbTypeId . Uint8 => ydbValue . GetUint8 ( ) ,
351+ YdbTypeId . Uint16 => ydbValue . GetUint16 ( ) ,
352+ YdbTypeId . Uint32 => ydbValue . GetUint32 ( ) ,
304353 _ => ThrowHelper . ThrowInvalidCast < long > ( ydbValue )
305354 } ;
306355 }
307356
308357 public ulong GetUint64 ( int ordinal )
309358 {
310- return GetFieldYdbValue ( ordinal ) . GetUint64 ( ) ;
359+ var ydbValue = GetFieldYdbValue ( ordinal ) ;
360+
361+ return ydbValue . TypeId switch
362+ {
363+ YdbTypeId . Uint64 => ydbValue . GetUint64 ( ) ,
364+ YdbTypeId . Uint8 => ydbValue . GetUint8 ( ) ,
365+ YdbTypeId . Uint16 => ydbValue . GetUint16 ( ) ,
366+ YdbTypeId . Uint32 => ydbValue . GetUint32 ( ) ,
367+ _ => ThrowHelper . ThrowInvalidCast < ulong > ( ydbValue )
368+ } ;
311369 }
312370
313371 public override string GetName ( int ordinal )
0 commit comments