
     h                       d 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.                  j0                  Zej.                  j2                  Zej4                  j6                  Zej4                  j8                  Z G d dee	ef         Zy)z*
psycopg server-side cursor base objects.
    )annotations   )errors)pqsql)ConnectionTypeParamsPQGenQuery)Row)execute)
BaseCursord   c                       e Zd ZdZdj	                         Z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       U/var/www/tech_portal/venv/lib/python3.12/site-packages/psycopg/_server_cursor_base.py__init__zServerCursorMixin.__init__!   s-    
%!-    c                    t         |          j                  d d      }|j                  d| j                         dj                  |      S )Nr    )super__repr__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.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   r,   s    r   r   zServerCursorMixin.scrollable4   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.withhold>   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.rownumberE   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pgconnr1   
COMMAND_OK_raise_for_resultformatr   BINARYr   _describe_gen)r   queryparamsbinarypgqresultss         r   _declare_genzServerCursorMixin._declare_genR   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   )rD   T)_pgconnsend_describe_portalr   encode	_encodingr   _check_results_results_select_current_resultr   r   )r   rK   s     r   rF   zServerCursorMixin._describe_genn   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 {})r@   rA   transaction_statusIDLEINTRANSr   r   r   SQLrD   Literalr   _exec_commandntuples
Identifier)r   tsrG   r5   s       r   r<   zServerCursorMixin._close_genv   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   )closedeInterfaceErrorr   r=   rF   r   rY   rD   rZ   r]   r   r@   r[   r   r0   _txset_pgresult	load_rowsr\   	_make_row)r   numrG   r5   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 {}rn   z	 ABSOLUTE )	
ValueErrorr   rY   rD   rZ   r]   r   r@   r[   )r   valuemoderG   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decoderQ   r   
ComposablerY   r]   r   r   appendr   r(   )r   rG   r)   s      r   r;   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)returnr~   )r   r   )r   r   )r   
int | None)NN)rG   r   rH   zParams | NonerI   r   r   PQGen[None])r   r   )rj   r   r   zPQGen[list[Row]])rq   intrr   r~   r   r   )rG   r   r   zsql.Composed)__name__
__module____qualname____doc__r&   	__slots__r    r%   propertyr   r   r   r7   rL   rF   r<   rk   rs   r;   __classcell__)r*   s   @r   r   r      s    NIOOQI         
- 
- QU(($1(BM(	(834B(3(r!   r   N)r   
__future__r   ro   r   rd   r   r   abcr   r	   r
   r   rowsr   
generatorsr   _cursor_baser   r   Formatr   rE   
ExecStatusrB   r2   TransactionStatusrW   rX   r    r!   r   <module>r      s    #   5 5   $ 	yy~~			]]%%
MM##		  



&
&a(
>3#67 a(r!   