@@ -210,38 +210,40 @@ internal async Task<List<PostgresType>> LoadBackendTypes(NpgsqlConnector conn, N
210210 command . AllResultTypesAreUnknown = true ;
211211
212212 timeout . CheckAndApply ( conn ) ;
213- using var reader = async ? await command . ExecuteReaderAsync ( ) : command . ExecuteReader ( ) ;
214- var byOID = new Dictionary < uint , PostgresType > ( ) ;
215-
216- // First the PostgreSQL version
217- if ( async)
218- {
219- await reader . ReadAsync ( ) ;
220- LongVersion = reader . GetString ( 0 ) ;
221- await reader . NextResultAsync ( ) ;
222- }
223- else
213+ var reader = async ? await command . ExecuteReaderAsync ( ) : command . ExecuteReader ( ) ;
214+ try
224215 {
225- reader . Read ( ) ;
226- LongVersion = reader . GetString ( 0 ) ;
227- reader. NextResult ( ) ;
228- }
216+ var byOID = new Dictionary < uint , PostgresType > ( ) ;
229217
230- // Then load the types
231- while ( async ? await reader. ReadAsync( ) : reader. Read( ) )
232- {
233- var ns = reader . GetString ( "nspname" ) ;
234- var internalName = reader . GetString ( "typname" ) ;
235- var oid = uint . Parse ( reader . GetString ( "oid" ) , NumberFormatInfo . InvariantInfo ) ;
236- Debug . Assert ( oid != 0 ) ;
237-
238- var elementOID = reader . IsDBNull ( "elemtypoid" )
239- ? 0
240- : uint . Parse ( reader . GetString ( "elemtypoid" ) , NumberFormatInfo . InvariantInfo ) ;
218+ // First the PostgreSQL version
219+ if ( async)
220+ {
221+ await reader . ReadAsync ( ) ;
222+ LongVersion = reader . GetString ( 0 ) ;
223+ await reader . NextResultAsync ( ) ;
224+ }
225+ else
226+ {
227+ reader . Read ( ) ;
228+ LongVersion = reader . GetString ( 0 ) ;
229+ reader. NextResult ( ) ;
230+ }
241231
242- var typeChar = reader . GetChar ( "typtype" ) ;
243- switch ( typeChar )
232+ // Then load the types
233+ while ( async ? await reader . ReadAsync ( ) : reader . Read ( ) )
244234 {
235+ var ns = reader . GetString ( "nspname" ) ;
236+ var internalName = reader . GetString ( "typname" ) ;
237+ var oid = uint . Parse ( reader . GetString ( "oid" ) , NumberFormatInfo . InvariantInfo ) ;
238+ Debug . Assert ( oid != 0 ) ;
239+
240+ var elementOID = reader . IsDBNull ( "elemtypoid" )
241+ ? 0
242+ : uint . Parse ( reader . GetString ( "elemtypoid" ) , NumberFormatInfo . InvariantInfo ) ;
243+
244+ var typeChar = reader . GetChar ( "typtype" ) ;
245+ switch ( typeChar )
246+ {
245247 case 'b' : // Normal base type
246248 var baseType = new PostgresBaseType ( ns , internalName , oid ) ;
247249 byOID[ baseType . OID ] = baseType ;
@@ -301,27 +303,35 @@ internal async Task<List<PostgresType>> LoadBackendTypes(NpgsqlConnector conn, N
301303
302304 default :
303305 throw new ArgumentOutOfRangeException ( $ "Unknown typtype for type '{ internalName } ' in pg_type: { typeChar } ") ;
306+ }
304307 }
305- }
306-
307- if ( async)
308- await reader . NextResultAsync ( ) ;
309- else
310- reader . NextResult ( ) ;
311308
312- LoadCompositeFields ( reader , byOID ) ;
313-
314- if ( SupportsEnumTypes )
315- {
316309 if ( async)
317310 await reader . NextResultAsync ( ) ;
318311 else
319312 reader . NextResult ( ) ;
320313
321- LoadEnumLabels( reader, byOID ) ;
322- }
314+ LoadCompositeFields ( reader , byOID ) ;
315+
316+ if ( SupportsEnumTypes )
317+ {
318+ if ( async )
319+ await reader. NextResultAsync( ) ;
320+ else
321+ reader. NextResult( ) ;
322+
323+ LoadEnumLabels( reader, byOID ) ;
324+ }
323325
324- return byOID. Values. ToList( ) ;
326+ return byOID. Values. ToList( ) ;
327+ }
328+ finally
329+ {
330+ if ( async )
331+ await reader. DisposeAsync( ) ;
332+ else
333+ reader. Dispose( ) ;
334+ }
325335 }
326336
327337 /// <summary>
0 commit comments