@@ -10,7 +10,6 @@ from asyncpg.exceptions import OutdatedSchemaCacheError
10
10
11
11
cdef void * binary_codec_map[(MAXSUPPORTEDOID + 1 ) * 2 ]
12
12
cdef void * text_codec_map[(MAXSUPPORTEDOID + 1 ) * 2 ]
13
- cdef dict TYPE_CODECS_CACHE = {}
14
13
cdef dict EXTRA_CODECS = {}
15
14
16
15
@@ -391,12 +390,11 @@ cdef uint32_t pylong_as_oid(val) except? 0xFFFFFFFFl:
391
390
392
391
cdef class DataCodecConfig:
393
392
def __init__ (self , cache_key ):
394
- try :
395
- self ._type_codecs_cache = TYPE_CODECS_CACHE[cache_key]
396
- except KeyError :
397
- self ._type_codecs_cache = TYPE_CODECS_CACHE[cache_key] = {}
398
-
399
- self ._local_type_codecs = {}
393
+ # Codec instance cache for derived types:
394
+ # composites, arrays, ranges, domains and their combinations.
395
+ self ._derived_type_codecs = {}
396
+ # Codec instances set up by the user for the connection.
397
+ self ._custom_type_codecs = {}
400
398
401
399
def add_types (self , types ):
402
400
cdef:
@@ -451,7 +449,7 @@ cdef class DataCodecConfig:
451
449
452
450
elem_delim = < Py_UCS4> ti[' elemdelim' ][0 ]
453
451
454
- self ._type_codecs_cache [oid, elem_format] = \
452
+ self ._derived_type_codecs [oid, elem_format] = \
455
453
Codec.new_array_codec(
456
454
oid, name, schema, elem_codec, elem_delim)
457
455
@@ -483,7 +481,7 @@ cdef class DataCodecConfig:
483
481
if has_text_elements:
484
482
format = PG_FORMAT_TEXT
485
483
486
- self ._type_codecs_cache [oid, format] = \
484
+ self ._derived_type_codecs [oid, format] = \
487
485
Codec.new_composite_codec(
488
486
oid, name, schema, format, comp_elem_codecs,
489
487
comp_type_attrs, element_names)
@@ -502,7 +500,7 @@ cdef class DataCodecConfig:
502
500
elem_codec = self .declare_fallback_codec(
503
501
base_type, name, schema)
504
502
505
- self ._type_codecs_cache [oid, format] = elem_codec
503
+ self ._derived_type_codecs [oid, format] = elem_codec
506
504
507
505
elif ti[' kind' ] == b' r' :
508
506
# Range type
@@ -523,7 +521,7 @@ cdef class DataCodecConfig:
523
521
elem_codec = self .declare_fallback_codec(
524
522
range_subtype_oid, name, schema)
525
523
526
- self ._type_codecs_cache [oid, elem_format] = \
524
+ self ._derived_type_codecs [oid, elem_format] = \
527
525
Codec.new_range_codec(oid, name, schema, elem_codec)
528
526
529
527
elif ti[' kind' ] == b' e' :
@@ -554,13 +552,13 @@ cdef class DataCodecConfig:
554
552
# Clear all previous overrides (this also clears type cache).
555
553
self .remove_python_codec(typeoid, typename, typeschema)
556
554
557
- self ._local_type_codecs [typeoid] = \
555
+ self ._custom_type_codecs [typeoid] = \
558
556
Codec.new_python_codec(oid, typename, typeschema, typekind,
559
557
encoder, decoder, c_encoder, c_decoder,
560
558
format, xformat)
561
559
562
560
def remove_python_codec (self , typeoid , typename , typeschema ):
563
- self ._local_type_codecs .pop(typeoid, None )
561
+ self ._custom_type_codecs .pop(typeoid, None )
564
562
self .clear_type_cache()
565
563
566
564
def _set_builtin_type_codec (self , typeoid , typename , typeschema , typekind ,
@@ -592,7 +590,7 @@ cdef class DataCodecConfig:
592
590
codec.schema = typeschema
593
591
codec.kind = typekind
594
592
595
- self ._local_type_codecs [typeoid] = codec
593
+ self ._custom_type_codecs [typeoid] = codec
596
594
break
597
595
else :
598
596
raise ValueError (' unknown alias target: {}' .format(alias_to))
@@ -604,7 +602,7 @@ cdef class DataCodecConfig:
604
602
self .clear_type_cache()
605
603
606
604
def clear_type_cache (self ):
607
- self ._type_codecs_cache .clear()
605
+ self ._derived_type_codecs .clear()
608
606
609
607
def declare_fallback_codec (self , uint32_t oid , str name , str schema ):
610
608
cdef Codec codec
@@ -654,12 +652,12 @@ cdef class DataCodecConfig:
654
652
return codec
655
653
else :
656
654
try :
657
- return self ._type_codecs_cache [oid, format]
655
+ return self ._derived_type_codecs [oid, format]
658
656
except KeyError :
659
657
return None
660
658
661
659
cdef inline Codec get_local_codec(self , uint32_t oid):
662
- return self ._local_type_codecs .get(oid)
660
+ return self ._custom_type_codecs .get(oid)
663
661
664
662
665
663
cdef inline Codec get_core_codec(
0 commit comments