
    giT                    f   d Z ddlmZ ddlmZmZmZmZmZm	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mZmZ dd
lmZmZ ddlmZ ddlmZ ddlmZmZ ddl m!Z! ddl"m#Z#m$Z$m%Z% ddl&m'Z' erddlm(Z( ddl)m*Z*m+Z+ ej,        j-        Z-ej,        j.        Z.ej/        j0        Z0ej/        j1        Z1ej/        j2        Z2ej/        j3        Z3ej/        j4        Z4ej/        j5        Z5ej/        j6        Z6ej/        j7        Z7ej/        j8        Z8ej/        j9        Z9ej:        j;        Z; G d deeef                   Z<dS )z
Psycopg BaseCursor object
    )annotations)TYPE_CHECKINGAnyGenericIterableNoReturnSequence)partial   )adapt)errors)pq)ConnectionTypeParamsPQGenQuery)RowRowMakerColumn)connection_summary)PostgresClientQueryPostgresQuery)Prepare)executefetchsend)capabilities)Transformer)PGconnPGresultc                  D   e Zd ZU d                                Zded<   ded<   ded<   eZded	<   dddZdedfdZ	dgdZ
edhd            Zedid            Zedjd            Zedkd            Zedld            Zedmd            Zdnd!Zdodpd&Zdqd(Zedrd*            Zdsd+Z	 dod"d"d,dtd4Zdud8Zdud9Zd"d"d,dvd<Z	 dodwd>Z	 dod"d?dxd@ZdydCZdodzdEZ	 dod{dGZdHd"dId|dKZ 	 dod}dLZ!d~dOZ"ddSZ#doddWZ$d~dXZ%dd[Z&d"d?dd\Z'dd]Z(dd^Z)ddaZ*ddbZ+edgdc            Z,d"S )
BaseCursorz
        _conn format _adapters arraysize _closed _results pgresult _pos
        _iresult _rowcount _query _tx _last_query _row_factory _make_row
        _pgconn _execmany_returning
        __weakref__
        r   _txRowMaker[Row]	_make_rowr    _pgconnztype[PostgresQuery]
_query_cls
connectionr   c                    || _         t          | _        |j        | _        t          j        |j                  | _        d| _	        d| _
        d | _        |                                  d S )Nr   F)_connTEXTformatpgconnr'   r   AdaptersMapadapters	_adapters	arraysize_closed_last_query_reset)selfr)   s     d/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/psycopg/_cursor_base.py__init__zBaseCursor.__init__:   sV    
!(*:+>??)-    Treset_queryboolreturnNonec                t    g | _         d | _        d| _        d| _        d| _        |  d | _        |r	d | _        d S d S )Nr   )_resultspgresult_pos_iresult	_rowcount_execmany_returning_query)r6   r:   s     r7   r5   zBaseCursor._resetD   sP    (*)-	)04  	DKKK	 	r9   strc           
        | j         j         d| j         j         }t          | j                  }| j        rd}n-| j        r$t          j        | j        j	                  j
        }nd}d| d| d| dt          |           dd		S )
N.closedz	no result<z [z] z at 0xx>)	__class__
__module____qualname__r   r'   r3   rA   r   
ExecStatusstatusnameid)r6   clsinforR   s       r7   __repr__zBaseCursor.__repr__P   s    *JJT^-HJJ!$,//< 	!FF] 	!]4=#788=FF F=3==&==D==4=====r9   c                    | j         S )z$The connection this cursor is using.)r+   r6   s    r7   r)   zBaseCursor.connection[   s     zr9   adapt.AdaptersMapc                    | j         S N)r1   rY   s    r7   r0   zBaseCursor.adapters`   s
    ~r9   c                    | j         S )z`True` if the cursor is closed.)r3   rY   s    r7   rJ   zBaseCursor.closedd   s     |r9   list[Column] | Nonec                      j         }|rW|j        s0|j        t          k    s |j        t          k    s|j        t
          k    r  fdt          |j                  D             S dS )z
        A list of `Column` objects describing the current resultset.

        `!None` if the current resultset didn't return tuples.
        c                0    g | ]}t          |          S  r   ).0ir6   s     r7   
<listcomp>z*BaseCursor.description.<locals>.<listcomp>{   s!    @@@F4OO@@@r9   N)rA   nfieldsrR   	TUPLES_OKSINGLE_TUPLETUPLES_CHUNKrange)r6   ress   ` r7   descriptionzBaseCursor.descriptioni   sp     m
  	K	zY&&z\))z\))@@@@U3;-?-?@@@@4r9   intc                    | j         S )z6Number of records affected by the precedent operation.)rD   rY   s    r7   rowcountzBaseCursor.rowcount   s     ~r9   
int | Nonec                P    | j         o| j         j        t          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.
        N)rA   rR   rf   rB   )r6   tupless     r7   	rownumberzBaseCursor.rownumber   s+     D4=#79#D",tyy,r9   sizesSequence[Any]c                    d S r\   ra   )r6   rs   s     r7   setinputsizeszBaseCursor.setinputsizes       r9   Nsizer   columnc                    d S r\   ra   )r6   rx   ry   s      r7   setoutputsizezBaseCursor.setoutputsize   rw   r9   bool | Nonec                    | j         t          | j                  dz
  k     r|                     | j         dz              dS dS )a  
        Move to the result set of the next query executed through `executemany()`
        or to the next result set if `execute()` returned more than one.

        Return `!True` if a new result is available, which will be the one
        methods `!fetch*()` will operate on.
        r   TN)rC   lenr@   _select_current_resultrY   s    r7   nextsetzBaseCursor.nextset   sE     =3t}--111''(9:::44r9   
str | Nonec                \    | j         r| j         j        nd}|r|                                ndS )z
        The command status tag from the last SQL command executed.

        `!None` if the cursor doesn't have a result available.
        N)rA   command_statusdecode)r6   msgs     r7   statusmessagezBaseCursor.statusmessage   s1     /3mEdm**",szz|||,r9   c                    t           r\   )NotImplementedErrorrY   s    r7   _make_row_makerzBaseCursor._make_row_maker   s    !!r9   preparebinaryqueryr   paramsParams | Noner   r   PQGen[None]c             #  j  K   |                      |          E d{V  |                     ||          }|                     |||          E d{V  | j        j        r$| j        j                                        E d{V  || _        | j        j                            | j                  E d{V  dS )z*Generator implementing `Cursor.execute()`.Nr   )	_start_query_convert_query_maybe_prepare_genr+   	_pipeline_communicate_genr4   	_preparedmaintain_gen)r6   r   r   r   r   pgqs         r7   _execute_genzBaseCursor._execute_gen   s       $$U+++++++++!!%00**3*OOOOOOOOO: 	?z+<<>>>>>>>>> :'44TZ@@@@@@@@@@@r9   
params_seqIterable[Params]	returningc              #    K   | j         j        }|sJ |                     |          E d{V  |sd| _        | j        J || _        d}|D ]p}|r |                     ||          }|| _        d}n|                    |           |                     |d          E d{V  |	                                E d{V  q|| _
        |r|                    d          E d{V  | j         j                            | j                   E d{V  dS )zY
        Generator implementing `Cursor.executemany()` with pipelines available.
        Nr   TFr   )flush)r+   r   r   rD   rE   r   rF   dumpr   r   r4   
_fetch_genr   r   )r6   r   r   r   pipelinefirstr   r   s           r7   _executemany_gen_pipelinez$BaseCursor._executemany_gen_pipeline   sv      :'$$U+++++++++ 	DN'///#,   		3 		3F !))%88!   ..sD.AAAAAAAAA002222222222  	7***666666666:'44TZ@@@@@@@@@@@r9   c              #    K   |                      |          E d{V  |sd| _        | j        J || _        d}|D ]V}|r |                     ||          }|| _        d}n|                    |           |                     |d          E d{V  W|| _        | j        j	        
                    | j                  E d{V  dS )z]
        Generator implementing `Cursor.executemany()` with pipelines not available.
        Nr   TFr   )r   rD   rE   r   rF   r   r   r4   r+   r   r   )r6   r   r   r   r   r   r   s          r7   _executemany_gen_no_pipelinez'BaseCursor._executemany_gen_no_pipeline   s      $$U+++++++++ 	DN'///#,   	B 	BF !))%88!   ..sD.AAAAAAAAAA :'44TZ@@@@@@@@@@@r9   r   r   c             #  2  K   |                      ||          \  }}|t          j        u r|                     ||           n|t          j        u ri|                     ||           | j        j        sGt          | j	                  E d {V \  }|j
        t          k    rt          j        || j                  |                     |||           | j        j                            |||          }| j        j        r1d }||||f}| j        j        j                            | |f           d S t          | j	                  E d {V }	|"| j        j                            ||||	           |                     |	           |                     |	           d S )Nr   encoding)_get_preparedr   NO_execute_sendSHOULD_send_preparer+   r   r   r'   rR   FATAL_ERROReerror_from_result	_encoding_send_query_preparedr   maybe_add_to_cacheresult_queueappendvalidate_check_results_set_results)
r6   r   r   r   preprS   resultkeyqueuedresultss
             r7   r   zBaseCursor._maybe_prepare_gen  s      ''W55
d7:s62222 w~%%""4---z+ S+24<+@+@ @ @ @ @ @ @IV}331&4>RRRR%%dC%???
 j"55c4FF: 	FtT*J -44dF^DDDF %T\22222222?J ))#tT7CCCG$$$'"""""r9   tuple[Prepare, bytes]c                B    | j         j                            ||          S r\   )r+   r   get)r6   r   r   s      r7   r   zBaseCursor._get_prepared4  s     z#''W555r9   r   c             #    K   |                      |          E d{V  |                     ||          }|                     ||d           |dk     rt          d          |dk    r| j                                         n/t          j        d           | j                            |           || _	        t          | j                  E d{V  dS )z2Generator to send the query for `Cursor.stream()`.NT)r   force_extendedr   zsize must be >= 1)check)r   r   r   
ValueErrorr'   set_single_row_moder   has_stream_chunkedset_chunked_rows_moder4   r   )r6   r   r   r   rx   r   s         r7   _stream_send_genzBaseCursor._stream_send_gen9  s       $$U+++++++++!!%003vdCCC!880111QYYL,,....+$7777L..t444 %%%%%%%%%%%r9   r   PQGen[PGresult | None]c              #    K   t          | j                  E d {V }|d S |j        }|t          k    s|t          k    r@|| _        | j                            ||           |r|                                 | _	        |S |t          k    s|t          k    r?|rt          | j                  E d {V }||t          k    rt          j        d          d S |                     |          S )N)set_loadersz1the operation in stream() didn't produce a result)r   r'   rR   rg   rh   rA   r$   set_pgresultr   r&   rf   
COMMAND_OKr   ProgrammingError_raise_for_result)r6   r   rj   rR   s       r7   _stream_fetchone_genzBaseCursor._stream_fetchone_genO  s     */*=*=======;4\!!V|%;%;DMH!!#5!999 8!%!5!5!7!7Jy  Fj$8$8 5!&t|!4!4444444  5""(G   4 ))#...r9   Query | Nonec              #    K   | j         rt          j        d          |                                  | j        r	| j        |ur d| _        t          j        |           | _        | j        	                                E d{V  dS )zGenerator to start the processing of a query.

        It is implemented as generator because it may send additional queries,
        such as `begin`.
        the cursor is closedN)
rJ   r   InterfaceErrorr5   r4   r   r   r$   r+   r   )r6   r   s     r7   r   zBaseCursor._start_queryj  s       ; 	;"#9::: 	/D$4E$A$A#D(..DH:**,,,,,,,,,,,r9   	statementc              #    K   | j         j        rt          j        d          |                                 E d{V  |r1t          | j                  }|                    ||           |j        }| 	                    |          }| 
                    |d           t          t          | j                  E d{V x}          dk    rt          j        d          |                     |d                    |                     |           dS )z<Generator implementing sending a command for `Cursor.copy().z$COPY cannot be used in pipeline modeNFr   r   z*COPY cannot be mixed with other operationsr   )r+   r   r   NotSupportedErrorr   r   r$   convertr   r   r   r~   r   r'   r   _check_copy_resultr   )r6   r   r   r   r   r   s         r7   _start_copy_genzBaseCursor._start_copy_geny  s$      : 	N%&LMMM$$&&&&&&&&&  	"%dh//CKK	6***	I##I..5///gdl&;&;;;;;;;<w==BB$%QRRR
+++'"""""r9   F)r   r   r   c          
        || j         }n|rt          nt          }|| _        | j        j        rW| j        j        j                            t          | j	        j
        |j        |j        |j        |j        |                     dS |s|j        s|t          k    r5| j	        
                    |j        |j        |j        |j        |           dS | j	                            |j                   dS )z
        Implement part of execute() before waiting common to sync and async.

        This is not a generator, but a normal non-blocking function.
        N)param_formatsparam_typesresult_format)r-   BINARYr,   rF   r+   r   command_queuer   r
   r'   send_query_paramsr   r   formatstypes
send_query)r6   r   r   r   fmts        r7   r   zBaseCursor._execute_send  s    >+CC",&&C: 	1 J .55L2KL"'- %"%  	 	 	 	 	  	1u| 	1sf}}L**#m!K! +      L##EK00000r9   c                f    |                      | j                  }|                    ||           |S r\   )r(   r$   r   )r6   r   r   r   s       r7   r   zBaseCursor._convert_query  s0     oodh''E6"""
r9   r   list[PGresult]c                    |st          j        d          |D ]?}|j        }|t          k    r+|t          k    r |t
          k    r|                     |           @dS )z
        Verify that the results of a query are valid.

        Verify that the query returned at least one result and that they all
        represent a valid result from the database.
        zgot no result from the queryN)r   InternalErrorrR   rf   r   EMPTY_QUERYr   )r6   r   rj   rR   s       r7   r   zBaseCursor._check_results  sr      	B/"@AAA 	, 	,CZF""v';';+@U@U&&s+++	, 	,r9   r   r!   r   c                `   |j         x}t          k    rt          j        || j                  |t
          k    rt          j        d          |t          k    s|t          k    s|t          k    rt          j
        d          t          j        dt          j        |          j                   )zV
        Raise an appropriate error message for an unexpected database result
        r   pipeline abortedz8COPY cannot be used with this method; use copy() insteadz%unexpected result status from query: )rR   r   r   r   r   PIPELINE_ABORTEDPipelineAbortedCOPY_INCOPY_OUT	COPY_BOTHr   r   r   rQ   rS   r6   r   rR   s      r7   r   zBaseCursor._raise_for_result  s     m#F33%ft~FFFF'''#$6777w&H"4"4)8K8K$J   /W2=;P;P;UWW  r9   rc   r-   pq.Format | Nonec                F   || _         | j        |         x}| _        | j                            ||           d| _        |j        t          k    r| j        j        | _	        n'|j        t          k    r| j        j        }||nd| _	        |                                 | _        dS )zL
        Select one of the results in the cursor as the active one.
        )r-   r   Nr?   )rC   r@   rA   r$   r   rB   rR   rf   ntuplesrD   r   command_tuplesr   r&   )r6   rc   r-   rj   nrowss        r7   r   z!BaseCursor._select_current_result  s     "mA..dm
 	c&111	:""!]2DNN
 Z8##M0E&+&7UURDN--//r9   c                   | j         #|| j        d d <   |                     d           d S | j         r=| j         }| j                            |           |r|                     d           d S d S |D ]}| xj        |j        pdz  c_        d S )Nr   )rE   r@   r   extendrD   r   )r6   r   first_batchrj   s       r7   r   zBaseCursor._set_results  s    #+&DM!!!''*****% 		:"m+KM  ))) /++A...../ /
  : :#"4"99: :r9   rS   bytesc                J   | j         j        ro| j         j        j                            t	          | j        j        ||j        |j                             | j         j        j	                            d            d S | j                            ||j        |j                   d S )N)r   )
r+   r   r   r   r
   r'   send_preparer   r   r   )r6   rS   r   s      r7   r   zBaseCursor._send_prepare  s    : 	RJ .55L-K %	     J -44T:::::L%%dEKU[%QQQQQr9   c          	     :   || j         }n|rt          nt          }| j        j        rL| j        j        j                            t          | j        j	        ||j
        |j        |                     d S | j        	                    ||j
        |j        |           d S )N)r   r   )r-   r   r,   r+   r   r   r   r
   r'   send_query_preparedr   r   )r6   rS   r   r   r   s        r7   r   zBaseCursor._send_query_prepared!  s     >+CC",&&C: 	J .55L4J"%+"%       L,,cj3 -     r9   c                   | j         rt          j        d          | j        x}st          j        d          |j        x}t          k    r|S |t          k    rt          j        || j	                  |t          k    rt          j        d          |j        rd|j                                         d}n6	 t          j        |          j        }n# t"          $ r | d}Y nw xY wd| d}t          j        d	|           )
Nr   zno result availabler   r   z (command status: )z
 - unknownz (result status: z)the last operation didn't produce records)rJ   r   r   rA   r   rR   rf   r   r   r   r   r   r   r   r   rQ   rS   r   )r6   rj   rR   detailstatus_names        r7   _check_result_for_fetchz"BaseCursor._check_result_for_fetch8  s9   ; 	;"#9:::}$ 	<$%:;;;j FY..J{""%cDNCCCC'''#$6777! <Lc.@.G.G.I.ILLL8"$-"7"7"<KK! 8 8 8%+"7"7"7KKK8;[;;;$DFDD  s   8C C$#C$c                    |j         }|t          k    s|t          k    rdS |t          k    rt	          j        || j                  t	          j        dt          j	        |          j
                   )zV
        Check that the value returned in a copy() operation is a legit COPY.
        Nr   zZcopy() should be used only with COPY ... TO STDOUT or COPY ... FROM STDIN statements, got )rR   r   r   r   r   r   r   r   r   rQ   rS   r   s      r7   r   zBaseCursor._check_copy_resultR  s     W( 2 2F{""%ft~FFFF$L/1}V/D/D/IL L  r9   valuemodec                    |                                  }|dk    r| j        |z   }n|dk    r|}nt          d| d          d|cxk    r|j        k     sn t	          d          || _        d S )Nrelativeabsolutez
bad mode: z'. It should be 'relative' or 'absolute'r   zposition out of bound)r  rB   r   r   
IndexError)r6   r	  r
  rj   newposs        r7   _scrollzBaseCursor._scrolla  s    **,,:Y&FFZFFW$WWWXXXF((((S[((((4555			r9   c                @    |                      d           d| _        dS )z3Non-blocking part of closing. Common to sync/async.F)r:   TN)r5   r3   rY   s    r7   _closezBaseCursor._closem  s#     	&&&r9   c                    | j         j        S r\   )r'   r   rY   s    r7   r   zBaseCursor._encodingt  s    |%%r9   )r)   r   )T)r:   r;   r<   r=   )r<   rG   )r<   r   )r<   rZ   )r<   r;   )r<   r^   )r<   rl   )r<   ro   )rs   rt   r<   r=   r\   )rx   r   ry   ro   r<   r=   )r<   r|   )r<   r   )r<   r%   )
r   r   r   r   r   r|   r   r|   r<   r   )r   r   r   r   r   r;   r<   r   )r   r   r   r|   r   r|   r<   r   )r   r   r   r|   r<   r   )
r   r   r   r   r   r|   rx   rl   r<   r   )r   r;   r<   r   )r   r   r<   r   )r   r   r   r   r<   r   )r   r   r   r;   r   r|   r<   r=   )r   r   r   r   r<   r   )r   r   r<   r=   )r   r!   r<   r   )rc   rl   r-   r   r<   r=   )rS   r   r   r   r<   r=   )rS   r   r   r   r   r|   r<   r=   )r<   r!   )r   r!   r<   r=   )r	  rl   r
  rG   r<   r=   )r<   r=   )-__name__rO   rP   split	__slots____annotations__r   r(   r8   r5   rW   propertyr)   r0   rJ   rk   rn   rr   rv   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r  r   ra   r9   r7   r#   r#   -   sA        
 EGG  OOO&3J3333   
 
 
 
 
	> 	> 	> 	>    X    X    X    X*    X - - - X-           - - - X-" " " " !%A
  $"A A A A A A$!A !A !A !AFA A A A>  $"*# *# *# *# *# *#Z :>6 6 6 6 6 !%&
 #& & & & & &,/ / / /6- - - - -  9=# # # # #>  %"+1 +1 +1 +1 +1 +1\ 59    , , , ,   "0 0 0 0 04: : : :"R R R R IM     .   4   
 
 
 
    & & & X& & &r9   r#   N)=__doc__
__future__r   typingr   r   r   r   r   r	   	functoolsr
    r   r   r   r   abcr   r   r   r   rowsr   r   _columnr   pq.miscr   _queriesr   r   
_preparingr   
generatorsr   r   r   _capabilitiesr   r   pq.abcr    r!   Formatr,   r   rQ   r   r   rf   r   r   r   r   rg   rh   r   TransactionStatusACTIVEr#   ra   r9   r7   <module>r*     sR    # " " " " " L L L L L L L L L L L L L L L L                         5 5 5 5 5 5 5 5 5 5 5 5               ' ' ' ' ' ' 8 8 8 8 8 8 8 8       , , , , , , , , , , ' ' ' ' ' ' )      ((((((((	y~		m']%
M#	=!
-
M#	m'})})=1 			$I	& I	& I	& I	& I	&,- I	& I	& I	& I	& I	&r9   