
    fiM                       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
j0                  j2                  Ze
j0                  j4                  Ze
j6                  j8                  Ze
j6                  j:                  Ze
j<                  j>                  Ze
j<                  j@                  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)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.z7_name _scrollable _withhold _described itersize _formatc                h    || _         || _        || _        d| _        t        | _        t        | _        y )NF)_name_scrollable	_withhold
_describedDEFAULT_ITERSIZEitersizeTEXT_format)selfname
scrollablewithholds       m/var/www/html/hwPaymentPortal-be-uat/backend/venv/lib/python3.12/site-packages/psycopg/_server_cursor_base.py__init__zServerCursorMixin.__init__$   s-    
%!-    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__,   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__6   s?     "((q1Q4::.*xxr#   c                    | j                   S )zThe name of the cursor.)r   r   s    r!   r   zServerCursorMixin.name<   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   r4   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   r4   s    r!   r    zServerCursorMixin.withholdK   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.rownumberR   sC     mm O#**	1NS5G5G35N"tyy,,r#   c              #  0  K   | j                  |      }| j                  r| j                         E 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_gen_start_query_convert_query_execute_sendr   _connpgconnr9   
COMMAND_OK_raise_for_resultformatr   BINARYr   _describe_gen)r   queryparamsbinarypgqresultss         r!   _declare_genzServerCursorMixin._declare_gen_   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   )rL   T)_pgconnsend_describe_portalr   encode	_encodingr   _check_results_results_select_current_resultr   r   )r   rS   s     r!   rN   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 {})rH   rI   transaction_statusIDLEINTRANSr   r   r	   SQLrL   Literalr   _exec_commandntuples
Identifier)r   tsrO   r=   s       r!   rD   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   rE   rN   r	   ra   rL   rb   re   r   rH   rc   r   r8   _txset_pgresult	load_rowsrd   	_make_row)r   numrO   r=   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 {}ru   z	 ABSOLUTE )	
ValueErrorr	   ra   rL   rb   re   r   rH   rc   )r   valuemoderO   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                   t        |t              r|j                  | j                        }t        |t        j
                        st	        j                  |      }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             |j                  |       t	        j                  d      j                  |      S )NDECLARESCROLLz	NO SCROLLCURSORz	WITH HOLDFORr,   )
isinstancebytesdecoderY   r	   
Composablera   re   r   r   appendr   r0   )r   rO   r1   s      r!   rC   z)ServerCursorMixin._make_declare_statement   s    eU#LL0E%0GGENE#S^^DJJ%?@'LLT-=-=;OPSWWX&'>>LL-.SWWU^$Uwws|  ''r#   )r   strr   bool | Noner    bool)r)   r   returnNone)r   r   )r   r   )r   r   )r   
int | None)NN)rO   r   rP   zParams | NonerQ   r   r   PQGen[None])r   r   )rq   r   r   zPQGen[list[Row]])rx   intry   r   r   r   )rO   r   r   zsql.Composed)__name__
__module____qualname____doc__r.   	__slots__r"   r   r*   r'   propertyr   r   r    r?   rT   rN   rD   rr   rz   rC   __classcell__)r2   s   @r!   r   r      s    NIOOQI %) 
         
- 
- QU(($1(BM(	(834B(3(r#   r   N)"r   
__future__r   typingr   warningsr   rv   r   rk   r   r	   abcr
   r   r   r   rowsr   
generatorsr   _cursor_baser   r   Formatr   rM   
ExecStatusrJ   r:   TransactionStatusr_   r`   r    r#   r!   <module>r      s    #     5 5   $ 	yy~~			]]%%
MM##		  



&
&k(
>3#67 k(r#   