§
    YŠtjŠ  ã                  ó,  — U d Z ddlmZ ddlmZmZ ddlmZmZm	Z	 ddl
mZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ erddlmZ ddlmZ eeeedf         f         Zded<   ej        j        Zej        j         Z  G d„ de¦  «        Z! G d„ d¦  «        Z"dS )z!
Support for prepared statements
é    )Úannotations)ÚIntEnumÚauto)ÚTYPE_CHECKINGÚAnyÚ	TypeAlias)ÚOrderedDictÚdeque)ÚSequenceé   )Úpq)ÚPQGen)ÚPostgresQuery)ÚPGresult)ÚBaseConnection.r   ÚKeyc                  óJ   — e Zd Z e¦   «         Z e¦   «         Z e¦   «         ZdS )ÚPrepareN)Ú__name__Ú
__module__Ú__qualname__r   ÚNOÚYESÚSHOULD© ó    úP/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/psycopg/_preparing.pyr   r      s/   € € € € € Ø	ˆ‰Œ€BØ
ˆ$‰&Œ&€CØˆT‰VŒV€F€F€Fr   r   c                  ó    — e Zd ZU dZded<   dZded<   d&d	„Zed'd„¦   «         Z	 d(d)d„Z	d*d„Z
ed+d„¦   «         Zd&d„Zd,d„Zd-d „Zd.d!„Zd/d%„ZdS )0ÚPrepareManageré   z
int | NoneÚprepare_thresholdéd   ÚintÚprepared_maxÚreturnÚNonec                ó¢   — t          ¦   «         | _        t          ¦   «         | _        d| _        t	          t
          d z           ¦   «         | _        d S )Nr   )r	   Ú_countsÚ_namesÚ_prepared_idxr
   ÚbytesÚ	_to_flush©Úselfs    r   Ú__init__zPrepareManager.__init__)   s>   € å.9©m¬mˆŒõ 0;©}¬}ˆŒð ˆÔå�u t™|Ô,Ñ.Ô.ˆŒˆˆr   Úqueryr   r   c                ó   — | j         | j        fS ©N)r0   Útypes)r0   s    r   ÚkeyzPrepareManager.key5   s   € à”˜Uœ[Ð)Ð)r   NÚprepareúbool | Noneútuple[Prepare, bytes]c                ó’  — |du s| j         €t          j        dfS | j                             |                      |¦  «        x}¦  «        x}rt          j        |fS | j                             |d¦  «        }|| j         k    s|r:d| j        › � 	                    ¦   «         }| xj        dz  c_        t          j
        |fS t          j        dfS )zP
        Check if a query is prepared, tell back whether to prepare it.
        FNr   r   Ú_pg3_r   )r!   r   r   r)   Úgetr4   r   r(   r*   Úencoder   )r.   r0   r5   r4   ÚnameÚcounts         r   r:   zPrepareManager.get9   sÏ   € ð �eÐÐ˜tÔ5Ð=å”:˜s�?Ð"à”;—?’?¨$¯(ª(°5©/¬/Ð#9 3Ñ:Ô:Ð:ˆ4ð 	%å”; Ð$Ð$à”× Ò   aÑ(Ô(ˆØ�DÔ*Ò*Ð*¨gÐ*à/˜4Ô-Ð/Ð/×6Ò6Ñ8Ô8ˆDØÐÔ !Ñ#ÐÔÝ”> 4Ð'Ð'õ ”:˜s�?Ð"r   Úprepr   ÚresultsúSequence[PGresult]Úboolc                óÔ   — | j         s|t          j        k    rP|D ]M}|j        t          k    rŒ|j        }|r1|                     d¦  «        s|dk    r|                      ¦   «         c S ŒNdS )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)r.   r>   r?   ÚresultÚcmdstats        r   Ú_should_discardzPrepareManager._should_discardQ   s‚   € ð
 Œ;ð 	(˜$¥'¤.Ò0Ð0Ø!ð (ð (�Ø”=¥JÒ.Ð.ØØ Ô/�Øð ( × 2Ò 2°8Ñ <Ô <ð (ÀÈ;Ò@VÐ@VØŸ:š:™<œ<Ð'Ð'Ð'øØˆur   c                ó~   — t          | ¦  «        dk    rdS t          | d         j        cxk    rt          k    rn ndS dS )zCReturn False if 'results' are invalid for prepared statement cache.r   Fr   T)ÚlenrD   rC   Ú	TUPLES_OK)r?   s    r   Ú_check_resultszPrepareManager._check_results_   sM   € õ ˆw‰<Œ<˜1ÒÐà�5å˜ œÔ*Ð7Ð7Ò7Ð7­iÒ7Ð7Ð7Ð7Ð7à�5àˆtr   c                ó*  — t          | j        ¦  «        | j        k    r| j                             d¬¦  «         t          | j        ¦  «        | j        k    r=| j                             d¬¦  «        d         }| j                             |¦  «         dS dS )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)rL   r(   r$   Úpopitemr)   r,   Úappend)r.   r<   s     r   Ú_rotatezPrepareManager._rotatel   sŽ   € õ ˆtŒ|ÑÔ˜tÔ0Ò0Ð0ØŒL× Ò  eÐ Ñ,Ô,Ð,åˆtŒ{ÑÔ˜dÔ/Ò/Ð/Ø”;×&Ò&¨EÐ&Ñ2Ô2°1Ô5ˆDØŒN×!Ò! $Ñ'Ô'Ð'Ð'Ð'ð 0Ð/r   r<   r+   ú
Key | Nonec                óˆ  — | j         €dS |                      |¦  «        x}| j        v rR|t          j        u r| j        |= || j        |<   n/| j        |xx         dz  cc<   | j                             |¦  «         dS || j        v r| j                             |¦  «         dS |t          j        u r|| j        |<   n
d| j        |<   |S )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!   r4   r(   r   r   r)   Úmove_to_end)r.   r0   r>   r<   r4   s        r   Úmaybe_add_to_cachez!PrepareManager.maybe_add_to_cachey   sä   € ð Ô!Ð)Ø�4à—8’8˜E‘?”?Ð"ˆC t¤|Ð3Ð3Ø•w”~Ð%Ð%Ø”L Ð%Ø#'�”˜CÑ Ð à”˜SÐ!Ð!Ô! QÑ&Ð!Ð!Ñ!Ø”×(Ò(¨Ñ-Ô-Ð-Ø�4à�D”KÐÐØŒK×#Ò# CÑ(Ô(Ð(Ø�4ð •w”~Ð%Ð%Ø#'�”˜CÑ Ð à$%�”˜SÑ!ØˆJr   r4   c                óø   — |                       ||¦  «        rdS |                      |¦  «        s8| j                             |d¦  «         | j                             |d¦  «         dS |                      ¦   «          dS )z’Validate cached entry with 'key' by checking query 'results'.

        Possibly record a command to perform maintenance on database side.
        N)rJ   rN   r)   Úpopr(   rS   )r.   r4   r>   r<   r?   s        r   ÚvalidatezPrepareManager.validate™   s|   € ð ×Ò  gÑ.Ô.ð 	ØˆFà×"Ò" 7Ñ+Ô+ð 	ØŒK�OŠO˜C Ñ&Ô&Ð&ØŒL×Ò˜S $Ñ'Ô'Ð'Ð'Ð'à�LŠL‰NŒNˆNˆNˆNr   c                óâ   — | j                              ¦   «          | j        rN| j                             ¦   «          | j                             ¦   «          | j                             d¦  «         dS dS )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(   rG   r)   r,   rR   r-   s    r   rG   zPrepareManager.clear©   sj   € ð 	Œ×ÒÑÔÐØŒ;ð 	ØŒK×ÒÑÔÐØŒN× Ò Ñ"Ô"Ð"ØŒN×!Ò! $Ñ'Ô'Ð'Ø�4à�5r   ÚconnúBaseConnection[Any]úPQGen[None]c              #  ó’   K  — | j         r=| j                              ¦   «         }|                     |¦  «        E d{V —† | j         °;dS dS )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)r.   r\   r<   s      r   Úmaintain_genzPrepareManager.maintain_gen¸   sk   è è € ð Œnð 	.Ø”>×)Ò)Ñ+Ô+ˆDØ×'Ò'¨Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ð Œnð 	.ð 	.ð 	.ð 	.ð 	.r   )r%   r&   )r0   r   r%   r   r2   )r0   r   r5   r6   r%   r7   )r>   r   r?   r@   r%   rA   )r?   r@   r%   rA   )r0   r   r>   r   r<   r+   r%   rT   )
r4   r   r>   r   r<   r+   r?   r@   r%   r&   )r%   rA   )r\   r]   r%   r^   )r   r   r   r!   Ú__annotations__r$   r/   Ústaticmethodr4   r:   rJ   rN   rS   rW   rZ   rG   rb   r   r   r   r   r   "   s'  € € € € € € à$%ÐÐ%Ð%Ð%Ñ%ð €LÐÐÐÑð
/ð 
/ð 
/ð 
/ð ð*ð *ð *ñ „\ð*ð <@ð#ð #ð #ð #ð #ð0ð ð ð ð ð
ð 
ð 
ñ „\ð
ð(ð (ð (ð (ðð ð ð ð@ð ð ð ð ð ð ð ð	.ð 	.ð 	.ð 	.ð 	.ð 	.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   rc   Ú
ExecStatusrD   rM   r   r   r   r   r   ú<module>rr      s‡  ððð ð ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ð Ð Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø $Ð $Ð $Ð $Ð $Ð $à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #àð 1Ø Ð Ð Ð Ð Ð Ø0Ð0Ð0Ð0Ð0Ð0à�u˜e C¨ HœoÐ-Ô.€Ð .Ð .Ð .Ñ .àŒ]Ô%€
ØŒMÔ#€	ðð ð ð ð ˆgñ ô ð ð_.ð _.ð _.ð _.ð _.ñ _.ô _.ð _.ð _.ð _.r   