
    jq                    V   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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)InterpolationTemplate)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d/dZd/dZd0d!Zd1d%Zd2d&Z xZS )3ServerCursorMixinzDMixin to add ServerCursor behaviour and implementation a BaseCursor.zY_name _scrollable _withhold _described itersize _format
        _iter_rows _page_pos
    namestr
scrollablebool | Nonewithholdboolc                    || _         || _        || _        d| _        t          | _        t          | _        d | _        d| _	        d S )NFr   )
_name_scrollable	_withhold
_describedDEFAULT_ITERSIZEitersizeTEXT_format
_iter_rows	_page_pos)selfr   r   r   s       e/workspace/show-city-briefing-agent/.venv/lib/python3.11/site-packages/psycopg/_server_cursor_base.py__init__zServerCursorMixin.__init__'   sA    
%!- -1    _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__3   sS    ; 	Ft$$ L L L	
 	
 	
 	
 	
r*   c                    t                                                                          d d          }|                    d| j                   d                    |          S )Nr    )superr1   splitinsertr   join)r'   parts	__class__s     r(   r1   zServerCursorMixin.__repr__=   sQ      ""((q11Q4:)***xxr*   c                    | j         S )zThe name of the cursor.)r   r'   s    r(   r   zServerCursorMixin.nameC   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   r=   s    r(   r   zServerCursorMixin.scrollableH   s     r*   c                    | j         S )zY
        If the cursor can be used after the creating transaction has committed.
        )r   r=   s    r(   r   zServerCursorMixin.withholdR   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.rownumberY   s<     m O#*	1NS5G35N",tyy,r*   Nqueryr   paramsParams | NonebinaryPQGen[None]c              #  >  K   |                      |          }| j        r!|                                 E d{V  d| _        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_genr%   _start_query_convert_query_execute_sendr   _connpgconnrC   
COMMAND_OK_raise_for_resultformatr$   BINARYr#   _describe_gen)r'   rJ   rK   rM   pgqresultss         r(   _declare_genzServerCursorMixin._declare_genf   sG     
 ,,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   )r[   T)_pgconnsend_describe_portalr   encode	_encodingr   _check_results_results_select_current_resultr$   r    )r'   r_   s     r(   r]   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 {})rW   rX   transaction_statusIDLEINTRANSr   r    r	   SQLr[   Literalr   _exec_commandntuples
Identifier)r'   tsrJ   rG   s       r(   rS   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    rT   r]   r	   rm   r[   rn   rq   r   rW   ro   r$   rB   _txset_pgresult	load_rowsrp   	_make_row)r'   rs   rJ   rG   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	   rm   r[   rn   rq   r   rW   ro   )r'   r   r   rJ   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*   c           	     ^   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                              |          }t          |t                    r0t          t          |dd d	          t          |d
d d	                    S t          |t                    r|                    | j                  }t          |t           j                  st          j        |          }||z   S )NDECLARESCROLLz	NO SCROLLCURSORz	WITH HOLDzFOR r5   declareqrJ   )r	   rm   rq   r   r   appendr   r9   
isinstancer   r   bytesdecodere   
Composable)r'   rJ   r:   r   s       r(   rR   z)ServerCursorMixin._make_declare_statement   sb   ##S^DJ%?%?@'LLT-=!N;OOPPPSWX&&'''> 	/LL--...SWV__%%%'#,,##E**eX&& 	gy$<<eWdC88  
 eU## 	1LL00E%00 	#GENNEr*   )r   r   r   r   r   r   )r+   r   r,   r-   )r,   r   )r,   r   )r,   r   )r,   r@   )NN)rJ   r   rK   rL   rM   r   r,   rN   )r,   rN   )rs   r@   r,   rt   )r   r   r   r   r,   rN   )rJ   r   r,   r   )__name__
__module____qualname____doc__r7   	__slots__r)   r   r3   r1   propertyr   r   r   rI   r`   r]   rS   r   r   rR   __classcell__)r;   s   @r(   r   r       s       NN 
 
 
 
 %) 
 
 
 
 
         X       X     X 
- 
- 
- X
- QU( ( ( ( (:   3 3 3 34B B B B(3 3 3 3       r*   r   N)%r   
__future__r   typingr   warningsr   r   r   ry   r   r	   abcr
   r   r   r   rowsr   _compatr   r   
generatorsr   _cursor_baser   r!   Formatr#   r\   
ExecStatusrY   rD   TransactionStatusrk   rl   r    r*   r(   <module>r      sn    # " " " " "                           5 5 5 5 5 5 5 5 5 5 5 5       , , , , , , , ,       $ $ $ $ $ $ 	y~		]%
M#		 


&y y y y y
>3#67 y y y y yr*   