
    ۇeh#                         d dl Z ddlmZ ddlmZ  G d dej                  Z G d dej                  Z G d	 d
e          Z G d de          ZdS )    N   )connresource)
exceptionsc                   l     e Zd ZdZdZ fdZej        d             Zej        d             Z	d Z
 xZS )CursorFactoryzA cursor interface for the results of a query.

    A cursor interface can be used to initiate efficient traversal of the
    results of a large query.
    )_state_args	_prefetch_query_timeout_record_classc                     t                                          |           || _        || _        || _        || _        || _        || _        ||                                 d S d S N)	super__init__r	   r
   r   r   r   r   attach)	self
connectionquerystateargsprefetchtimeoutrecord_class	__class__s	           @/var/www/api/venv/lib/python3.11/site-packages/asyncpg/cursor.pyr   zCursorFactory.__init__   sg     	$$$
!)LLNNNNN     c           	          | j         dn| j         }t          | j        | j        | j        | j        | j        || j                  S )N2   )r
   CursorIterator_connectionr   r   r	   r   r   )r   r   s     r   	__aiter__zCursorFactory.__aiter__2   sI    /22T^KKJM
 
 	
r   c                     | j         t          j        d          t          | j        | j        | j        | j        | j                  }|	                    | j
                                                  S )Nz;prefetch argument can only be specified for iterable cursor)r
   r   InterfaceErrorCursorr!   r   r   r	   r   _initr   	__await__)r   cursors     r   r'   zCursorFactory.__await__?   sq    >%+MO O OKKJ
 
 ||DM**44666r   c                     | j         :| j                                          | j                            | j                    d S d S r   r   detachr!   _maybe_gc_stmtr   s    r   __del__zCursorFactory.__del__M   E    ;"K   ++DK88888 #"r   )__name__
__module____qualname____doc__	__slots__r   r   guardedr"   r'   r.   __classcell__r   s   @r   r   r      s         I    ( 

 

 

 7 7 79 9 9 9 9 9 9r   r   c                   L     e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Z xZS )

BaseCursor)r   r	   _portal_name
_exhaustedr   r   c                     t                                          |           || _        || _        ||                                 d | _        d| _        || _        || _        d S )NF)	r   r   r	   r   r   r:   r;   r   r   )r   r   r   r   r   r   r   s         r   r   zBaseCursor.__init__^   s`    $$$
LLNNN )r   c                     | j         t          j        d          | j         j        rt          j        d          | j        j        st          j        d          d S )Nz(cursor: no associated prepared statementz(cursor: the prepared statement is closedz1cursor cannot be created outside of a transaction)r   r   r$   closedr!   	_top_xactNoActiveSQLTransactionErrorr-   s    r   _check_readyzBaseCursor._check_readyi   s    ;+:< < < ; 	<+:< < < ) 	E8CE E E	E 	Er   c                 (  K   |                                   | j        rt          j        d          | j        }|j        }|                    d          | _        |                    | j        | j	        | j        |d|           d {V \  }}| _
        |S )N!cursor already has an open portalportalT)rA   r:   r   r$   r!   	_protocol_get_unique_idbind_executer   r	   r;   )r   nr   conprotocolbuffer_s          r   
_bind_execzBaseCursor._bind_execv   s       	5+35 5 5 =..x88+3+@+@KT%64,J ,J &J &J &J &J &J &J"4?r   c                   K   |                                   | j        rt          j        d          | j        }|j        }|                    d          | _        |                    | j        | j	        | j        |           d {V }|S )NrC   rD   )
rA   r:   r   r$   r!   rE   rF   bindr   r	   )r   r   rI   rJ   rK   s        r   _bindzBaseCursor._bind   s       	5+35 5 5 =..x88}}T[$*%)%6%,. . . . . . . . r   c                    K   |                                   | j        st          j        d          | j        j        }|                    | j        | j        |d|           d {V \  }}| _        |S )N#cursor does not have an open portalT)	rA   r:   r   r$   r!   rE   executer   r;   )r   rH   r   rJ   rK   rL   s         r   _execzBaseCursor._exec   s        	7+57 7 7 #-+3+;+;K*AtW,> ,> &> &> &> &> &> &>"4?r   c                    K   |                                   | j        st          j        d          | j        j        }|                    | j        |           d {V  d | _        d S )NrR   )rA   r:   r   r$   r!   rE   close_portal)r   r   rJ   s      r   _close_portalzBaseCursor._close_portal   s        	7+57 7 7 #-##D$5w????????? r   c           	      ^   g }| j         r|                    d           |                    d           | j        j                            d          rd}n| j        j        }d                    || j        j        | j        j        d	                    |          t          |                     S )N	exhausted zasyncpg.asyncpgz<{}.{} "{!s:.30}" {}{:#x}> )r;   appendr   r1   
startswithformatr0   r   r   joinid)r   attrsmods      r   __repr__zBaseCursor.__repr__   s    ? 	&LL%%%R>$//
;; 	,CC.+C+22(KHHUOORXX' ' 	'r   c                     | j         :| j                                          | j                            | j                    d S d S r   r*   r-   s    r   r.   zBaseCursor.__del__   r/   r   )r0   r1   r2   r4   r   rA   rM   rP   rT   rW   rd   r.   r6   r7   s   @r   r9   r9   S   s        I	* 	* 	* 	* 	*E E E     
 
 
	! 	! 	!' ' ' 9 9 9 9 9 9 9r   r9   c                   b     e Zd ZdZ fdZej        d             Zej        d             Z xZ	S )r    )_bufferr
   r   c                     t                                          |||||           |dk    rt          j        d          t	          j                    | _        || _        || _        d S )Nr   z+prefetch argument must be greater than zero)	r   r   r   r$   collectionsdequerg   r
   r   )	r   r   r   r   r   r   r   r   r   s	           r   r   zCursorIterator.__init__   sj     	UE4FFFq==+=? ? ? #(**!r   c                     | S r    r-   s    r   r"   zCursorIterator.__aiter__   s    r   c                   K   | j         Q| j                            | j        | j        d| j                   d {V | _         | j                                          | j        sG| j        s@| 	                    | j
        | j                   d {V }| j                            |           | j        sG| j        s@|                     | j
        | j                   d {V }| j                            |           | j        r'| j        r |                     | j                   d {V  | j        r| j                                        S t           NT)namedr   )r   r!   _get_statementr   r   r   r   r:   r;   rM   r
   rg   extendrT   rW   popleftStopAsyncIteration)r   rK   s     r   	__anext__zCursorIterator.__anext__   sz     ; $ 0 ? ?!/	 !@ ! !      DK K     	( 	(??4>4=IIIIIIIIFL'''| 	(DO 	(::dndmDDDDDDDDFL''' 	4 	4$$T]333333333< 	*<'')))  r   )
r0   r1   r2   r4   r   r   r5   r"   rt   r6   r7   s   @r   r    r       s{        4I         (    ! ! ! ! ! ! !r   r    c                       e Zd ZdZdZd Zej        ddd            Zej        ddd            Z	ej        ddde
fd	            ZdS )
r%   z-An open *portal* into the results of a query.rl   c                   K   | j         L| j                            | j        |d| j                   d {V | _         | j                                          |                                  |                     |           d {V  | S rn   )r   r!   rp   r   r   r   rA   rP   )r   r   s     r   r&   zCursor._init   s      ; $ 0 ? ?!/	 !@ ! !      DK K   jj!!!!!!!!!r   N)r   c                   K   |                                   |dk    rt          j        d          | j        rg S |                     ||           d{V }t          |          |k     rd| _        |S )zReturn the next *n* rows as a list of :class:`Record` objects.

        :param float timeout: Optional timeout value in seconds.

        :return: A list of :class:`Record` instances.
        r   n must be greater than zeroNT)rA   r   r$   r;   rT   len)r   rH   r   recss       r   fetchzCursor.fetch  s       	66+,IJJJ? 	IZZ7++++++++t99q=="DOr   c                   K   |                                   | j        rdS |                     d|           d{V }t          |          dk     r	d| _        dS |d         S )zReturn the next row.

        :param float timeout: Optional timeout value in seconds.

        :return: A :class:`Record` instance.
        Nr   Tr   )rA   r;   rT   ry   )r   r   rz   s      r   fetchrowzCursor.fetchrow  sr       	? 	4ZZ7++++++++t99q=="DO4Awr   returnc                P  K   |                                   |dk    rt          j        d          | j        j        }|                    d                    || j                  |           d{V }t          |	                                d                   }||k     rd| _
        |S )zSkip over the next *n* rows.

        :param float timeout: Optional timeout value in seconds.

        :return: A number of rows actually skipped over (<= *n*).
        r   rx   zMOVE FORWARD {:d} {}Nr   T)rA   r   r$   r!   rE   r   r_   r:   intsplitr;   )r   rH   r   rJ   statusadvanceds         r   forwardzCursor.forward/  s       	66+,IJJJ#-~~&<&C&Ct '" '"#*, , , , , , , , v||~~a())a<<"DOr   )r0   r1   r2   r3   r4   r&   r   r5   r{   r}   r   r   rl   r   r   r%   r%      s        77I   (,     " (,       *.   3      r   r%   )	ri   rZ   r   r   ConnectionResourcer   r9   r    r%   rl   r   r   <module>r      s                  B9 B9 B9 B9 B9L3 B9 B9 B9Jl9 l9 l9 l9 l90 l9 l9 l9^5! 5! 5! 5! 5!Z 5! 5! 5!pI I I I IZ I I I I Ir   