@@ -724,7 +724,9 @@ async def connect(dsn=None, *,
724724 Pass ``0`` to disable the cache.
725725
726726 :param int max_cached_statement_lifetime:
727- number of seconds a prepared statement can stay in the cache.
727+ the maximum time in seconds a prepared statement will stay
728+ in the cache. Pass ``0`` to allow statements be cached
729+ indefinitely.
728730
729731 :param float command_timeout: the default timeout for operations on
730732 this connection (the default is no timeout).
@@ -823,9 +825,9 @@ def __init__(self, *, loop, max_size, on_remove, max_lifetime):
823825
824826 # We use an OrderedDict for LRU implementation. Operations:
825827 #
826- # * We use a simple `__setitem__` to push a new entry:
828+ # * We use a simple `__setitem__` to push a new entry:
827829 # `entries[key] = new_entry`
828- # That will push `new_entry` to the *end* of the entries dict.
830+ # That will push `new_entry` to the *end* of the entries dict.
829831 #
830832 # * When we have a cache hit, we call
831833 # `entries.move_to_end(key, last=True)`
@@ -847,14 +849,18 @@ def get_max_size(self):
847849 return self ._max_size
848850
849851 def set_max_size (self , new_size ):
852+ assert new_size >= 0
850853 self ._max_size = new_size
851854 self ._maybe_cleanup ()
852855
853856 def get_max_lifetime (self ):
854857 return self ._max_lifetime
855858
856859 def set_max_lifetime (self , new_lifetime ):
860+ assert new_lifetime >= 0
857861 self ._max_lifetime = new_lifetime
862+ for entry in self ._entries .values ():
863+ self ._set_entry_timeout (entry )
858864
859865 def get (self , query , * , promote = True ):
860866 if not self ._max_size :
@@ -890,13 +896,19 @@ def iter_statements(self):
890896 return (e ._statement for e in self ._entries .values ())
891897
892898 def clear (self ):
899+ for entry in self ._entries .values ():
900+ self ._clear_entry_callback (entry )
893901 self ._entries .clear ()
894902
895- def _new_entry (self , query , statement ):
896- entry = _StatementCacheEntry ( self , query , statement )
903+ def _set_entry_timeout (self , entry ):
904+ self . _clear_entry_callback ( entry )
897905 if self ._max_lifetime :
898906 entry ._cleanup_cb = self ._loop .call_later (
899907 self ._max_lifetime , self ._on_entry_expired , entry )
908+
909+ def _new_entry (self , query , statement ):
910+ entry = _StatementCacheEntry (self , query , statement )
911+ self ._set_entry_timeout (entry )
900912 return entry
901913
902914 def _on_entry_expired (self , entry ):
0 commit comments