File tree Expand file tree Collapse file tree 3 files changed +36
-0
lines changed Expand file tree Collapse file tree 3 files changed +36
-0
lines changed Original file line number Diff line number Diff line change @@ -591,6 +591,25 @@ cdef class ThinDbObjectTypeCache:
591591 dict types_by_name
592592 list partial_types
593593
594+ cdef int _clear_meta_cursor(self ) except - 1 :
595+ """
596+ Clears the cursor used for searching metadata. This is needed when
597+ returning a connection to the pool since user-level objects are
598+ retained.
599+ """
600+ if self .meta_cursor is not None :
601+ self .meta_cursor.close()
602+ self .meta_cursor = None
603+ self .return_value_var = None
604+ self .full_name_var = None
605+ self .oid_var = None
606+ self .tds_var = None
607+ self .attrs_ref_cursor_var = None
608+ self .version_var = None
609+ self .schema_var = None
610+ self .package_name_var = None
611+ self .name_var = None
612+
594613 cdef int _determine_element_type_csfrm(self , ThinDbObjectTypeImpl typ_impl,
595614 uint8_t* csfrm) except - 1 :
596615 """
Original file line number Diff line number Diff line change @@ -296,7 +296,14 @@ cdef class ThinPoolImpl(BasePoolImpl):
296296 some reason it will be dropped; otherwise, it will be returned to the
297297 list of connections available for further use.
298298 """
299+ cdef:
300+ ThinDbObjectTypeCache type_cache
301+ int cache_num
299302 with self ._condition:
303+ if conn_impl._dbobject_type_cache_num > 0 :
304+ cache_num = conn_impl._dbobject_type_cache_num
305+ type_cache = get_dbobject_type_cache(cache_num)
306+ type_cache._clear_meta_cursor()
300307 if conn_impl._protocol._socket is not None :
301308 self ._free_used_conn_impls.append(conn_impl)
302309 conn_impl._time_in_pool = time.monotonic()
Original file line number Diff line number Diff line change @@ -707,5 +707,15 @@ def test_2429_soda_metadata_cache(self):
707707 pool .soda_metadata_cache = False
708708 self .assertEqual (pool .soda_metadata_cache , False )
709709
710+ def test_2430_get_different_types_from_pooled_connections (self ):
711+ "2430 - get different object types from different connections"
712+ pool = test_env .get_pool (min = 1 , max = 2 , increment = 1 )
713+ with pool .acquire () as conn :
714+ typ = conn .gettype ("UDT_SUBOBJECT" )
715+ self .assertEqual (typ .name , "UDT_SUBOBJECT" )
716+ with pool .acquire () as conn :
717+ typ = conn .gettype ("UDT_OBJECTARRAY" )
718+ self .assertEqual (typ .name , "UDT_OBJECTARRAY" )
719+
710720if __name__ == "__main__" :
711721 test_env .run_test_cases ()
You can’t perform that action at this time.
0 commit comments