ó
    Ð]jŠ  ã                  óD  • % S r SSKJr  SSKJrJr  SSKJrJrJ	r	  SSK
JrJr  SSKJr  SSKJr  SS	KJr  SS
KJr  \(       a  SSKJr  SSKJr  \\\\S4   4   rS\S'   \R<                  R>                  r\R<                  R@                  r  " S S\5      r! " S S5      r"g)z!
Support for prepared statements
é    )Úannotations)ÚIntEnumÚauto)ÚTYPE_CHECKINGÚAnyÚ	TypeAlias)ÚOrderedDictÚdeque)ÚSequenceé   )Úpq)ÚPQGen)ÚPostgresQuery)ÚPGresult)ÚBaseConnection.r   ÚKeyc                  ó>   • \ rS rSr\" 5       r\" 5       r\" 5       rSrg)ÚPrepareé   © N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   ÚNOÚYESÚSHOULDÚ__static_attributes__r   ó    ÚO/home/mande/repo/quber/.venv/lib/python3.13/site-packages/psycopg/_preparing.pyr   r      s   † Ù	‹€BÙ
‹&€CÙ‹VƒFr   r   c                  óÞ   • \ rS rSr% SrS\S'   SrS\S'   SS jr\SS	 j5       r	 S     SS jjr
SS jr\SS j5       rSS jr        SS jr          SS jrSS jrSS jrSrg
)ÚPrepareManageré"   é   z
int | NoneÚprepare_thresholdéd   ÚintÚprepared_maxc                ó‚   • [        5       U l        [        5       U l        SU l        [        [
        S -     " 5       U l        g )Nr   )r	   Ú_countsÚ_namesÚ_prepared_idxr
   ÚbytesÚ	_to_flush©Úselfs    r    Ú__init__ÚPrepareManager.__init__)   s3   € ä.9«mˆŒô 0;«}ˆŒð ˆÔäœu t™|Ò,Ó.ˆ�r   c                ó2   • U R                   U R                  4$ ©N)ÚqueryÚtypes)r5   s    r    ÚkeyÚPrepareManager.key5   s   € à—‘˜UŸ[™[Ð)Ð)r   Nc                óä  • USL d  U R                   c  [        R                  S4$ U R                  R	                  U R                  U5      =n5      =n(       a  [        R                  U4$ U R                  R	                  US5      nXPR                   :¼  d  U(       aD  SU R                   3R                  5       nU =R                  S-  sl        [        R                  U4$ [        R                  S4$ )z@
Check if a query is prepared, tell back whether to prepare it.
Fr   r   Ú_pg3_r   )r%   r   r   r+   Úgetr7   r   r*   r,   Úencoder   )r0   r5   Úpreparer7   ÚnameÚcounts         r    r;   ÚPrepareManager.get9   sÉ   € ð �eÒ˜t×5Ñ5Ñ=ä—:‘:˜s�?Ð"à—;‘;—?‘?¨$¯(©(°5«/Ð#9 3Ó:Ð:ˆ4Õ:ä—;‘; Ð$Ð$à—‘× Ñ   aÓ(ˆØ×*Ñ*Ó*®gà˜4×-Ñ-Ð.Ð/×6Ñ6Ó8ˆDØ×Ò !Ñ#ÕÜ—>‘> 4Ð'Ð'ô —:‘:˜s�?Ð"r   c                ó  • U R                   (       d  U[        R                  :X  ab  U H\  nUR                  [        :w  a  M  UR
                  nU(       d  M.  UR                  S5      (       d  US:X  d  ML  U R                  5       s  $    g)z·Check if we need to discard our entire state: it should happen on
rollback or on dropping objects, because the same object may get
recreated and postgres would fail internal lookups.
s   DROP s   ROLLBACKF)r+   r   r   ÚstatusÚ
COMMAND_OKÚcommand_statusÚ
startswithÚclear)r0   ÚprepÚresultsÚresultÚcmdstats        r    Ú_should_discardÚPrepareManager._should_discardQ   sg   € ð
 �;�;˜$¤'§.¡.Ó0Û!�Ø—=‘=¤JÓ.ÙØ ×/Ñ/�ß�7 × 2Ñ 2°8× <Ñ <ÀÈ;Õ@VØŸ:™:›<Ò'ñ "ð r   c                óp   • [        U 5      S:w  a  g[        U S   R                  s=:w  a  [        :w  a   g  gg)zCReturn False if 'results' are invalid for prepared statement cache.r   Fr   T)ÚlenrC   rB   Ú	TUPLES_OK)rH   s    r    Ú_check_resultsÚPrepareManager._check_results_   s7   € ô ˆw‹<˜1Óàä˜ ™×*Ñ*Õ7¬iÔ7àð 8ñ r   c                ó2  • [        U R                  5      U R                  :”  a  U R                  R                  SS9  [        U R                  5      U R                  :”  a8  U R                  R                  SS9S   nU R
                  R                  U5        gg)zˆEvict an old value from the cache.

If it was prepared, deallocate it. Do it only once: if the cache was
resized, deallocate gradually.
F)Úlastr   N)rN   r*   r(   Úpopitemr+   r.   Úappend)r0   r>   s     r    Ú_rotateÚPrepareManager._rotatel   sz   € ô ˆt�|‰|Ó˜t×0Ñ0Ó0Ø�L‰L× Ñ  eÐ Ñ,äˆt�{‰{Ó˜d×/Ñ/Ó/Ø—;‘;×&Ñ&¨EÐ&Ð2°1Ñ5ˆDØ�N‰N×!Ñ! $Õ'ð 0r   c                óà  • U R                   c  gU R                  U5      =o@R                  ;   ab  U[        R                  L a  U R                  U	 X0R
                  U'   gU R                  U==   S-  ss'   U R                  R                  U5        gX@R
                  ;   a  U R
                  R                  U5        gU[        R                  L a  X0R
                  U'   U$ SU R                  U'   U$ )zºHandle 'query' for possible addition to the cache.

If a new entry has been added, return its key. Return None otherwise
(meaning the query is already in cache or cache is not enabled).
Nr   )r%   r7   r*   r   r   r+   Úmove_to_end)r0   r5   rG   r>   r7   s        r    Úmaybe_add_to_cacheÚ!PrepareManager.maybe_add_to_cachey   sÓ   € ð ×!Ñ!Ñ)Øà—8‘8˜E“?Ð"ˆC§|¡|Ó3Ø”w—~‘~Ò%Ø—L‘L Ð%Ø#'—‘˜CÑ ð ð —‘˜SÓ! QÑ&Ó!Ø—‘×(Ñ(¨Ô-Øà—K‘KÓØ�K‰K×#Ñ# CÔ(Øð ”w—~‘~Ò%Ø#'—‘˜CÑ ð ˆJð %&�—‘˜SÑ!ØˆJr   c                óð   • U R                  X$5      (       a  gU R                  U5      (       d9  U R                  R                  US5        U R                  R                  US5        gU R                  5         g)z‚Validate cached entry with 'key' by checking query 'results'.

Possibly record a command to perform maintenance on database side.
N)rK   rP   r+   Úpopr*   rV   )r0   r7   rG   r>   rH   s        r    ÚvalidateÚPrepareManager.validate™   sX   € ð ×Ñ ×.Ñ.Øà×"Ñ" 7×+Ñ+Ø�K‰K�O‰O˜C Ô&Ø�L‰L×Ñ˜S $Õ'à�L‰L�Nr   c                óú   • U R                   R                  5         U R                  (       aP  U R                  R                  5         U R                  R                  5         U R                  R	                  S5        gg)zClear the cache of the maintenance commands.

Clear the internal state and prepare a command to clear the state of
the server.
NTF)r*   rF   r+   r.   rU   r/   s    r    rF   ÚPrepareManager.clear©   sS   € ð 	�‰×ÑÔØ�;�;Ø�K‰K×ÑÔØ�N‰N× Ñ Ô"Ø�N‰N×!Ñ! $Ô'Øàr   c              #  óÀ   #   • U R                   (       aG  U R                   R                  5       nUR                  U5       Sh  v•N   U R                   (       a  MF  gg N7f)z±
Generator to send the commands to perform periodic maintenance

Deallocate unneeded command in the server, or flush the prepared
statements server state entirely if necessary.
N)r.   ÚpopleftÚ_deallocate)r0   Úconnr>   s      r    Úmaintain_genÚPrepareManager.maintain_gen¸   sB   é € ð �n�nØ—>‘>×)Ñ)Ó+ˆDØ×'Ñ'¨Ó-×-Ð-ð �n�n‹ná-ùs   ‚A AÁAÁAÁA)r*   r+   r,   r.   )ÚreturnÚNone)r5   r   rh   r   r4   )r5   r   r=   zbool | Nonerh   ztuple[Prepare, bytes])rG   r   rH   úSequence[PGresult]rh   Úbool)rH   rj   rh   rk   )r5   r   rG   r   r>   r-   rh   z
Key | None)
r7   r   rG   r   r>   r-   rH   rj   rh   ri   )rh   rk   )re   zBaseConnection[Any]rh   zPQGen[None])r   r   r   r   r%   Ú__annotations__r(   r1   Ústaticmethodr7   r;   rK   rP   rV   rZ   r^   rF   rf   r   r   r   r    r"   r"   "   sÐ   ‡ à$%Ð�zÓ%ð €L�#Óô
/ð ó*ó ð*ð <@ð#Ø"ð#Ø-8ð#à	õ#ô0ð ó
ó ð
ô(ðØ"ðØ*1ðØ9>ðà	ôð@ØðØ%ðØ-2ðØ=Oðà	ôô ÷	.r   r"   N)#Ú__doc__Ú
__future__r   Úenumr   r   Útypingr   r   r   Úcollectionsr	   r
   Úcollections.abcr   Ú r   Úabcr   Ú_queriesr   Úpq.abcr   Ú_connection_baser   Útupler-   r'   r   rl   Ú
ExecStatusrC   rO   r   r"   r   r   r    Ú<module>r{      s‚   ðòõ #ç ß 0Ñ 0ß *Ý $å Ý Ý #æÝ Ý0à�u˜e C¨ H™oÐ-Ñ.€€YÓ .à�]‰]×%Ñ%€
Ø�M‰M×#Ñ#€	ôˆgô ÷_.ò _.r   