
    2iq                       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
j6                  j8                  Ze
j6                  j:                  Ze
j<                  j>                  Ze
j<                  j@                  Z e
jB                  jD                  Z"e
jB                  jF                  Z# G d deeef         Z$y)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j	                         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ddZddZddZ xZS )ServerCursorMixinzDMixin to add ServerCursor behaviour and implementation a BaseCursor.zY_name _scrollable _withhold _described itersize _format
        _iter_rows _page_pos
    c                    || _         || _        || _        d| _        t        | _        t        | _        d | _        d| _	        y )NFr   )
_name_scrollable	_withhold
_describedDEFAULT_ITERSIZEitersizeTEXT_format
_iter_rows	_page_pos)selfname
scrollablewithholds       Z/var/www/html/secretsanta/venv/lib/python3.12/site-packages/psycopg/_server_cursor_base.py__init__zServerCursorMixin.__init__'   s=    
%!- -1    c                d    | j                   ry  |t        j                  |        dt               y )Nz[ was deleted while still open. Please use 'with' or '.close()' to close the cursor properly)closedobject__repr__ResourceWarning)r!   _ServerCursorMixin__warns     r%   __del__zServerCursorMixin.__del__3   s2    ;;t$% &L L	
r'   c                    t         |          j                  d d      }|j                  d| j                         dj                  |      S )Nr    )superr+   splitinsertr   join)r!   parts	__class__s     r%   r+   zServerCursorMixin.__repr__=   s?     "((q1Q4::.*xxr'   c                    | j                   S )zThe name of the cursor.)r   r!   s    r%   r"   zServerCursorMixin.nameC   s     zz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   r8   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   r8   s    r%   r$   zServerCursorMixin.withholdR   s    
 ~~r'   c                    | j                   }|xr$ |j                  t        k(  xs |j                  dk(  }|r| j                  S 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   sC     mm O#**	1NS5G5G35N"tyy,,r'   c              #  >  K   | j                  |      }| j                  r| j                         E d{    d| _        d| _        | j	                  |      E d{    | j                  ||      }| j                  |d       t        | j                  j                        E d{   }|d   j                  t        k7  r| j                  |d          || j                  | _        n|rt        nt         | _        | j#                         E d{    y7 7 7 r7 w)z0Generator implementing `ServerCursor.execute()`.NFT)force_extended)_make_declare_statementr   
_close_genr   _start_query_convert_query_execute_sendr   _connpgconnr=   
COMMAND_OK_raise_for_resultformatr   BINARYr   _describe_gen)r!   queryparamsbinarypgqresultss         r%   _declare_genzServerCursorMixin._declare_genf   s     
 ,,U3 ??(((#DO$$U+++!!%03t4$TZZ%6%6772;+""72;/ >;;DL%+6DL %%'''% ) 	, 8 	(sG   1DD&DDAD&D'A(DDDDDDc              #  >  K   | j                   j                  | j                  j                  | j                               t        | j                         E d {   }| j                  |       || _        | j                  d| j                         d| _
        y 7 Aw)Nr   )rP   T)_pgconnsend_describe_portalr   encode	_encodingr   _check_results_results_select_current_resultr   r   )r!   rW   s     r%   rR   zServerCursorMixin._describe_gen   st     ))$***;*;DNN*KL$T\\22G$##Adll#;	 3s   ABBABc              #  v  K   | j                   j                  j                  }|t        k7  r
|t        k7  ry | j
                  s
|t        k(  ry | j                  sxt        j                  d      j                  t        j                  | j                              }| j                   j                  |      E d {   }|J |j                  dk(  ry t        j                  d      j                  t        j                  | j                              }| j                   j                  |      E d {    y 7 }7 w)Nz3SELECT 1 FROM pg_catalog.pg_cursors WHERE name = {}r   zCLOSE {})rL   rM   transaction_statusIDLEINTRANSr   r   r	   SQLrP   Literalr   _exec_commandntuples
Identifier)r!   tsrS   rA   s       r%   rH   zServerCursorMixin._close_gen   s     ZZ11 :"- ~~"* GGEfS[[,-  "ZZ55e<<C?"?{{a
#**3>>$**+EF::++E222 = 	3s%   B5D97D58A7D9/D70D97D9c              #    K   | j                   rt        j                  d      | j                  s0| j	                         E d {    | j                         E d {    t        j                  d      j                  |t        j                  d      nt        j                  |      t        j                  | j                              }| j                  j                  || j                        E d {   }|J || _        | j                   j#                  |d       | j                   j%                  d|j&                  | j(                        S 7 7 7 bw)Nzthe cursor is closedzFETCH FORWARD {} FROM {}ALL)result_formatF)set_loadersr   )r)   eInterfaceErrorr   rI   rR   r	   re   rP   rf   ri   r   rL   rg   r   r<   _txset_pgresult	load_rowsrh   	_make_row)r!   numrS   rA   s       r%   
_fetch_genzServerCursorMixin._fetch_gen   s	    ;;""#9::((***))+++23::!kCGGENs{{3/?NN4::&
 11%t||1TTcu5xx!!!S[[$..AA ++ Us8   AEEEEBE6E7AEEEc              #  \  K   |dvrt        d| d      t        j                  d      j                  t        j                  |dk(  rdnd      t        j                  |      t        j
                  | j                              }| j                  j                  |      E d {    y 7 w)N)relativeabsolutez
bad mode: z'. It should be 'relative' or 'absolute'zMOVE{} {} FROM {}ry   z	 ABSOLUTE )	
ValueErrorr	   re   rP   rf   ri   r   rL   rg   )r!   valuemoderS   s       r%   _scroll_genzServerCursorMixin._scroll_gen   s     //z$/VWXX+,33GG4:#5K2>KKNN4::&

 ::++E222s   B"B,$B*%B,c           	     D   t        j                  d      t        j                  | j                        g}| j                  2|j                  t        j                  | j                  rdnd             |j                  t        j                  d             | j                  r$|j                  t        j                  d             |j                  t        j                  d             t        j                  d      j                  |      }t        |t              r$t        t        |dd d	      t        |d
d d	            S t        |t              r|j                  | j                        }t        |t         j                        st        j                  |      }||z   S )NDECLARESCROLLz	NO SCROLLCURSORz	WITH HOLDzFOR r0   declareqrS   )r	   re   ri   r   r   appendr   r4   
isinstancer   r   bytesdecoder]   
Composable)r!   rS   r5   r   s       r%   rG   z)ServerCursorMixin._make_declare_statement   s    #S^^DJJ%?@'LLT-=-=;OPSWWX&'>>LL-.SWWV_%''#,##E*eX&gy$<eWdC8 
 eU#LL0E%0GGENEr'   )r"   strr#   bool | Noner$   bool)r-   r   returnNone)r   r   )r   r   )r   r   )r   
int | None)NN)rS   r   rT   zParams | NonerU   r   r   PQGen[None])r   r   )ru   r   r   zPQGen[list[Row]])r|   intr}   r   r   r   )rS   r   r   r   )__name__
__module____qualname____doc__r2   	__slots__r&   r   r.   r+   propertyr"   r#   r$   rC   rX   rR   rH   rv   r~   rG   __classcell__)r6   s   @r%   r   r       s    N 
 %) 
         
- 
- QU(($1(BM(	(:34B(3r'   r   N)%r   
__future__r   typingr   warningsr   rz   r   ro   r   r	   abcr
   r   r   r   rowsr   _compatr   r   
generatorsr   _cursor_baser   r   Formatr   rQ   
ExecStatusrN   r>   TransactionStatusrc   rd   r    r'   r%   <module>r      s    #     5 5  ,  $ 	yy~~			]]%%
MM##		  



&
&y
>3#67 yr'   