
    giM                    F   d Z ddlmZ ddlmZ ddlmZ ddlmZ	 ddlm
Z
mZ ddlmZmZmZmZ dd	lmZ dd
lmZ ddlmZ dZe
j        j        Ze
j        j        Ze
j        j        Ze
j        j        Ze
j        j        Ze
j        j         Z  G d deeef                   Z!dS )z*
psycopg server-side cursor base objects.
    )annotations)Any)warn   )errors)pqsql)ConnectionTypeParamsPQGenQuery)Row)execute)
BaseCursord   c                       e Zd ZdZd                                Zd(d	Zefd)dZd* fdZ	e
d*d            Ze
d+d            Ze
d,d            Ze
d-d            Z	 d.d/dZd0dZd0dZd1d!Zd2d%Zd3d'Z xZS )4ServerCursorMixinzDMixin to add ServerCursor behaviour and implementation a BaseCursor.z7_name _scrollable _withhold _described itersize _formatnamestr
scrollablebool | Nonewithholdboolc                n    || _         || _        || _        d| _        t          | _        t          | _        d S )NF)_name_scrollable	_withhold
_describedDEFAULT_ITERSIZEitersizeTEXT_format)selfr   r   r   s       k/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/psycopg/_server_cursor_base.py__init__zServerCursorMixin.__init__$   s1    
%!-    _ServerCursorMixin__warnr   returnNonec                p    | j         rd S  |t                              |            dt                     d S )Nz[ was deleted while still open. Please use 'with' or '.close()' to close the cursor properly)closedobject__repr__ResourceWarning)r#   r'   s     r$   __del__zServerCursorMixin.__del__,   sS    ; 	Ft$$ L L L	
 	
 	
 	
 	
r&   c                    t                                                                          d d          }|                    d| j                   d                    |          S )Nr    )superr-   splitinsertr   join)r#   parts	__class__s     r$   r-   zServerCursorMixin.__repr__6   sQ      ""((q11Q4:)***xxr&   c                    | j         S )zThe name of the cursor.)r   r#   s    r$   r   zServerCursorMixin.name<   s     zr&   c                    | j         S )z
        Whether the cursor is scrollable or not.

        If `!None` leave the choice to the server. Use `!True` if you want to
        use `scroll()` on the cursor.
        )r   r9   s    r$   r   zServerCursorMixin.scrollableA   s     r&   c                    | j         S )zY
        If the cursor can be used after the creating transaction has committed.
        )r   r9   s    r$   r   zServerCursorMixin.withholdK   s    
 ~r&   
int | Nonec                `    | j         }|o|j        t          k    p
|j        dk    }|r| j        ndS )zoIndex of the next row to fetch in the current result.

        `!None` if there is no result to fetch.
        r&   N)pgresultstatus	TUPLES_OKcommand_status_pos)r#   restupless      r$   	rownumberzServerCursorMixin.rownumberR   s<     m O#*	1NS5G35N",tyy,r&   Nqueryr   paramsParams | NonebinaryPQGen[None]c              #  0  K   |                      |          }| j        r!|                                 E d{V  d| _        |                     |          E d{V  |                     ||          }|                     |d           t          | j        j                  E d{V }|d         j	        t          k    r|                     |d                    || j        | _        n|rt          nt          | _        |                                 E d{V  dS )z0Generator implementing `ServerCursor.execute()`.NFT)force_extended)_make_declare_statementr   
_close_gen_start_query_convert_query_execute_sendr   _connpgconnr?   
COMMAND_OK_raise_for_resultformatr"   BINARYr!   _describe_gen)r#   rF   rG   rI   pgqresultss         r$   _declare_genzServerCursorMixin._declare_gen_   s@     
 ,,U33 ? 	$(((((((((#DO$$U+++++++++!!%003t444$TZ%6777777772;++""72;/// >;DLL%+566DL %%'''''''''''r&   c              #  *  K   | j                             | j                            | j                             t          | j                   E d {V }|                     |           || _        |                     d| j	                   d| _
        d S )Nr   )rW   T)_pgconnsend_describe_portalr   encode	_encodingr   _check_results_results_select_current_resultr"   r   )r#   r[   s     r$   rY   zServerCursorMixin._describe_gen{   s      ))$**;*;DN*K*KLLL$T\22222222G$$$##Adl#;;;r&   c              #  ,  K   | j         j        j        }|t          k    r|t          k    rd S | j        s|t          k    rd S | j        sot          j        d          	                    t          j
        | j                            }| j                             |          E d {V }|J |j        dk    rd S t          j        d          	                    t          j        | j                            }| j                             |          E d {V  d S )Nz3SELECT 1 FROM pg_catalog.pg_cursors WHERE name = {}r   zCLOSE {})rS   rT   transaction_statusIDLEINTRANSr   r   r	   SQLrW   Literalr   _exec_commandntuples
Identifier)r#   tsrF   rC   s       r$   rO   zServerCursorMixin._close_gen   s     Z1 ::"--F ~ 	"**F  	GE fS[,,--  "Z55e<<<<<<<<C???{a
##**3>$*+E+EFF:++E22222222222r&   numPQGen[list[Row]]c              #  h  K   | j         rt          j        d          | j        s4|                                 E d {V  |                                 E d {V  t          j        d                              |t          j        d          nt          j	        |          t          j
        | j                            }| j                            || j                  E d {V }|J || _        | j                            |d           | j                            d|j        | j                  S )Nzthe cursor is closedzFETCH FORWARD {} FROM {}ALL)result_formatF)set_loadersr   )r+   eInterfaceErrorr   rP   rY   r	   ri   rW   rj   rm   r   rS   rk   r"   r>   _txset_pgresult	load_rowsrl   	_make_row)r#   ro   rF   rC   s       r$   
_fetch_genzServerCursorMixin._fetch_gen   s9     ; 	;"#9::: 	,((*********))+++++++++233::!kCGENNNs{3/?/?N4:&&
 
 11%t|1TTTTTTTTcu555x!!!S[$.AAAr&   valueintmodec              #  P  K   |dvrt          d| d          t          j        d                              t          j        |dk    rdnd          t          j        |          t          j        | j                            }| j                            |          E d {V  d S )N)relativeabsolutez
bad mode: z'. It should be 'relative' or 'absolute'zMOVE{} {} FROM {}r   z	 ABSOLUTE )	
ValueErrorr	   ri   rW   rj   rm   r   rS   rk   )r#   r|   r~   rF   s       r$   _scroll_genzServerCursorMixin._scroll_gen   s      ///W$WWWXXX+,,33G4:#5#5KK2>>KN4:&&
 

 :++E22222222222r&   sql.Composedc                   t          |t                    r|                    | j                  }t          |t          j                  st	          j        |          }t	          j        d          t	          j        | j                  g}| j	        0|
                    t	          j        | j	        rdnd                     |
                    t	          j        d                     | j        r'|
                    t	          j        d                     |
                    t	          j        d                     |
                    |           t	          j        d                              |          S )NDECLARESCROLLz	NO SCROLLCURSORz	WITH HOLDFORr1   )
isinstancebytesdecodera   r	   
Composableri   rm   r   r   appendr   r5   )r#   rF   r6   s      r$   rN   z)ServerCursorMixin._make_declare_statement   s#   eU## 	1LL00E%00 	#GENNE##S^DJ%?%?@'LLT-=!N;OOPPPSWX&&'''> 	/LL--...SWU^^$$$Uws||  '''r&   )r   r   r   r   r   r   )r'   r   r(   r)   )r(   r   )r(   r   )r(   r   )r(   r<   )NN)rF   r   rG   rH   rI   r   r(   rJ   )r(   rJ   )ro   r<   r(   rp   )r|   r}   r~   r   r(   rJ   )rF   r   r(   r   )__name__
__module____qualname____doc__r3   	__slots__r%   r   r/   r-   propertyr   r   r   rE   r\   rY   rO   r{   r   rN   __classcell__)r7   s   @r$   r   r      s       NNIOOQQI    %) 
 
 
 
 
         X       X     X 
- 
- 
- X
- QU( ( ( ( (8   3 3 3 34B B B B(3 3 3 3( ( ( ( ( ( ( (r&   r   N)"r   
__future__r   typingr   warningsr   r   r   ru   r   r	   abcr
   r   r   r   rowsr   
generatorsr   _cursor_baser   r   Formatr!   rX   
ExecStatusrU   r@   TransactionStatusrg   rh   r    r&   r$   <module>r      sV    # " " " " "                           5 5 5 5 5 5 5 5 5 5 5 5             $ $ $ $ $ $ 	y~		]%
M#		 


&k( k( k( k( k(
>3#67 k( k( k( k( k(r&   