
    *JfUz                        d Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
 ddlmZ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 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%m&Z&m'Z' d	dl(m)Z) d	dl*m+Z+ d	dl,m-Z- d	dl.m/Z/m0Z0 d	dl1m2Z2 d	dl3m4Z4 d	dl5m6Z6 d	dl7m8Z8m9Z9m:Z: erd	dlm;Z; d	dl<m=Z=m>Z> d	dl?m@Z@ ejA        jB        ZBejA        jC        ZCejD        jE        ZEejD        jF        ZFejD        jG        ZGejD        jH        ZHejD        jI        ZIejD        jJ        ZJejD        jK        ZKejD        jL        ZLejD        jM        ZMejN        jO        ZO G d deee%f                   ZP G d dePde%f                   ZQd S )!z
psycopg cursor objects
    )partial)TracebackType)AnyGenericIterableIteratorList)OptionalNoReturnSequenceTupleType)overloadTYPE_CHECKING)warn)contextmanager   )pq)adapt)errors)ConnectionTypeQueryParamsPQGen)CopyWriter)RowRowMaker
RowFactoryColumn)Self)connection_summary)PostgresQueryPostgresClientQuery)Pipeline)pgconn_encoding)Prepare)executefetchsend)Transformer)PGconnPGresult)
Connectionc                   b   e Zd ZU d                                Zej        Zded<   ee	         ed<   ded<   de
fdZdId
eddfdZdefdZede
fd            Zedej        fd            Zedefd            Zedeee                  fd            Zedefd            Zedee         fd            Zdee         ddfdZdJdedee         ddfdZ dee         fdZ!edee         fd            Z"dee	         fdZ#	 dJdddde$dee%         d ee         d!ee         de&d         f
d"Z'de$d#e(e%         d$ede&d         fd%Z)de$d#e(e%         d$ede&d         fd&Z*dddd'e+d ee         d!ee         de&eed(                           fd)Z,	 dJd'e+d ee         de-e.e/f         fd*Z0	 dJdd+de$dee%         d!ee         de&d         fd,Z1d-ede&ed(                  fd.Z2dJdee$         de&d         fd/Z3	 dJd0e$dee%         de&d         fd1Z4d2dd3de+d4ed!ee         ddfd5Z5	 dJde$dee%         de+fd6Z6d7ed(         ddfd8Z7d9d(de8fd:Z9	 dJd;ed<eej:                 ddfd=Z;d7ed(         ddfd>Z<d?e/de+ddfd@Z=dd+d?e/d'e+d!ee         ddfdAZ>dKdBZ?dLdCZ@dDedEeddfdFZAdKdGZBedefdH            ZCdS )M
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	_make_rowr-   _pgconn
connectionc                     || _         t          | _        |j        | _        t          j        |j                  | _        d| _	        d| _
        d | _        |                                  d S )Nr   F)_connTEXTformatpgconnr4   r   AdaptersMapadapters	_adapters	arraysize_closed_last_query_resetselfr5   s     Q/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/psycopg/cursor.py__init__zBaseCursor.__init__A   sV    
!(*:+>??,0    Treset_queryreturnNc                 t    g | _         d | _        d| _        d| _        d| _        |  d | _        |r	d | _        d S d S )Nr   )_resultspgresult_pos_iresult	_rowcount_execmany_returning_query)rC   rG   s     rD   rA   zBaseCursor._resetK   sP    *,.2	,37  	DKKK	 	rF   c           
         | 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#   r4   r?   rL   r   
ExecStatusstatusnameid)rC   clsinfor\   s       rD   __repr__zBaseCursor.__repr__W   s    *JJT^-HJJ!$,//< 	!FF] 	!]4=#788=FF F=3==&==D==4=====rF   c                     | j         S )z$The connection this cursor is using.)r7   rC   s    rD   r5   zBaseCursor.connectionb   s     zrF   c                     | j         S N)r=   rc   s    rD   r<   zBaseCursor.adaptersg   s
    ~rF   c                     | j         S )z`True` if the cursor is closed.)r?   rc   s    rD   rT   zBaseCursor.closedk   s     |rF   c                       j         }|rG|j        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irC   s     rD   
<listcomp>z*BaseCursor.description.<locals>.<listcomp>   s!    @@@F4OO@@@rF   N)rL   nfieldsr\   	TUPLES_OKSINGLE_TUPLErange)rC   ress   ` rD   descriptionzBaseCursor.descriptionp   sb     m
  	K	:22cjL6P6P@@@@U3;-?-?@@@@4rF   c                     | j         S )z6Number of records affected by the precedent operation.)rO   rc   s    rD   rowcountzBaseCursor.rowcount   s     ~rF   c                 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)rL   r\   rn   rM   )rC   tupless     rD   	rownumberzBaseCursor.rownumber   s+     D4=#79#D",tyy,rF   sizesc                     d S re   ri   )rC   rx   s     rD   setinputsizeszBaseCursor.setinputsizes       rF   sizecolumnc                     d S re   ri   )rC   r|   r}   s      rD   setoutputsizezBaseCursor.setoutputsize   r{   rF   c                     | j         !| j        j        rt          dt                     | 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.
        Nzusing nextset() in pipeline mode for several execute() is deprecated and will be dropped in 3.2; please use different cursors to receive more than one resultr   T)	rP   r7   	_pipeliner   DeprecationWarningrN   lenrK   _select_current_resultrc   s    rD   nextsetzBaseCursor.nextset   sv     #+
0D+; #	   =3t}--111''(9:::44rF   c                 \    | 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)rL   command_statusdecode)rC   msgs     rD   statusmessagezBaseCursor.statusmessage   s1     /3mEdm**",szz|||,rF   c                     t           re   )NotImplementedErrorrc   s    rD   _make_row_makerzBaseCursor._make_row_maker   s    !!rF   preparebinaryqueryparamsr   r   c             #     K   |                      |          E d{V  |                     ||          }|                     |||          E d{V }| j        j        r%| j        j                                        E d{V  n5|J |                     |           || _        |                     d           || _	        | j        j
                                        D ]"}| j                            |          E d{V  #dS )z*Generator implementing `Cursor.execute()`.Nr   r   )_start_query_convert_query_maybe_prepare_genr7   r   _communicate_gen_check_resultsrK   r   r@   	_preparedget_maintenance_commands_exec_command)rC   r   r   r   r   pgqresultscmds           rD   _execute_genzBaseCursor._execute_gen   sU      $$U+++++++++!!%00!44 5 
 
 
 
 
 
 
 
 : 	+z+<<>>>>>>>>>>&&&(((#DM''*** :'@@BB 	5 	5Cz//4444444444	5 	5rF   
params_seq	returningc              #   H  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                                        D ]"}| j                             |          E d{V  #dS )zY
        Generator implementing `Cursor.executemany()` with pipelines available.
        Nr   TFr   flush)r7   r   r   rO   rP   r   rQ   dumpr   r   r@   
_fetch_genr   r   r   )	rC   r   r   r   pipelinefirstr   r   r   s	            rD   _executemany_gen_pipelinez$BaseCursor._executemany_gen_pipeline   s      :'$$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:'@@BB 	5 	5Cz//4444444444	5 	5rF   c              #   t  K   |                      |          E d{V  |sd| _        d}|D ]}|r |                     ||          }|| _        d}n|                    |           |                     |d          E d{V }|J |                     |           |r| j                            |           |D ]}| xj        |j	        pdz  c_        | j        r| 
                    d           || _        | j        j                                        D ]"}	| j                            |	          E d{V  #dS )z]
        Generator implementing `Cursor.executemany()` with pipelines not available.
        Nr   TFr   )r   rO   r   rQ   r   r   r   rK   extendcommand_tuplesr   r@   r7   r   r   r   )
rC   r   r   r   r   r   r   r   rq   r   s
             rD   _executemany_gen_no_pipelinez'BaseCursor._executemany_gen_no_pipeline  s      $$U+++++++++ 	DN  	> 	>F !))%88!   !%!8!8d!8!K!KKKKKKKG&&&((( >$$W---- # > >CNNc&8&=A=NNN> = 	+''*** :'@@BB 	5 	5Cz//4444444444	5 	5rF   r   r.   c             #     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                            ||||	           |	S )Nr   encoding)_get_preparedr(   NO_execute_sendSHOULD_send_preparer7   r   r)   r4   r\   FATAL_ERROReerror_from_result	_encoding_send_query_preparedr   maybe_add_to_cacheresult_queueappendvalidate)
rC   r   r   r   prepr]   resultkeyqueuedr   s
             rD   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4 %T\22222222?J ))#tT7CCCrF   c                 B    | j         j                            ||          S re   )r7   r   get)rC   r   r   s      rD   r   zBaseCursor._get_preparedW  s     z#''W555rF   r   c             #     K   |                      |          E d{V  |                     ||          }|                     ||d           | j                                         || _        t          | j                  E d{V  dS )z2Generator to send the query for `Cursor.stream()`.NT)r   force_extended)r   r   r   r4   set_single_row_moder@   r+   )rC   r   r   r   r   s        rD   _stream_send_genzBaseCursor._stream_send_gen\  s       $$U+++++++++!!%003vdCCC((*** %%%%%%%%%%%rF   r   c              #     K   t          | j                  E d {V }|d S |j        }|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*   r4   r\   ro   rL   r2   set_pgresultr   r3   rn   
COMMAND_OKr   ProgrammingError_raise_for_result)rC   r   rq   r\   s       rD   _stream_fetchone_genzBaseCursor._stream_fetchone_genk  s     t|,,,,,,,,;4\!!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 ))#...rF   c              #     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)
rT   r   InterfaceErrorrA   r@   r   r,   r2   r7   r   )rC   r   s     rD   r   zBaseCursor._start_query  s       ; 	;"#9::: 	/D$4E$A$A#D(..DH:**,,,,,,,,,,,rF   	statementc              #   ,  K   | j         j        rt          j        d          |                                 E d{V  |r1t          | j                  }|                    ||           |j        }| 	                    |          }| 
                    |d           t          | j                  E d{V }t          |          dk    rt          j        d          |                     |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   )r7   r   r   NotSupportedErrorr   r%   r2   convertr   r   r   r)   r4   r   r   _check_copy_resultrK   r   )rC   r   r   r   r   r   s         rD   _start_copy_genzBaseCursor._start_copy_gen  s)      : 	N%&LMMM$$&&&&&&&&&  	"%dh//CKK	6***	I##I..5///$T\22222222w<<1$%QRRR
+++##A&&&&&rF   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)r9   BINARYr8   rQ   r7   r   command_queuer   r   r4   send_query_paramsr   r   formatstypes
send_query)rC   r   r   r   fmts        rD   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0rF   c                 Z    t          | j                  }|                    ||           |S re   )r$   r2   r   )rC   r   r   r   s       rD   r   zBaseCursor._convert_query  s,     DH%%E6"""
rF   r   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   InternalErrorr\   rn   r   EMPTY_QUERYr   )rC   r   rq   r\   s       rD   r   zBaseCursor._check_results  sr      	B/"@AAA 	, 	,CZF""v';';+@U@U&&s+++	, 	,rF   r   c                 `   |j         }|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: )r\   r   r   r   r   PIPELINE_ABORTEDPipelineAbortedCOPY_INCOPY_OUT	COPY_BOTHr   r   r   r[   r]   rC   r   r\   s      rD   r   zBaseCursor._raise_for_result  s     [  %ft~FFFF'''#$6777w&H"4"4)8K8K$J   /W2=;P;P;UWW  rF   rk   r9   c                 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.
        )r9   r   NrJ   )rN   rK   rL   r2   r   rM   r\   rn   ntuplesrO   r   r   r   r3   )rC   rk   r9   rq   nrowss        rD   r   z!BaseCursor._select_current_result  s     "mA..dm
 	c&111	:""!]2DNN
 Z8##M0E&+&7UURDN--//rF   c                 h   |                      |           | j         }| j        5| j                            |           |r|                     d           d S d S | j        r5| j                            |           |r|                     d           d S d S |D ]}| xj        |j        pdz  c_        d S )Nr   )r   rK   rP   r   r   rO   r   )rC   r   first_batchrq   s       rD   _set_results_from_pipelinez%BaseCursor._set_results_from_pipeline#  s    G$$$-'#+M  ))) /++A...../ /
 ' >$$W--- 3//222223 3
 # > >CNNc&8&=A=NNN> >rF   r]   c                 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   )
r7   r   r   r   r   r4   send_preparer   r   r   )rC   r]   r   s      rD   r   zBaseCursor._send_prepare9  s    : 	RJ .55L-K %	     J -44T:::::L%%dEKU[%QQQQQrF   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   )r9   r   r8   r7   r   r   r   r   r4   send_query_preparedr   r   )rC   r]   r   r   r   s        rD   r   zBaseCursor._send_query_preparedG  s     >+CC",&&C: 	J .55L4J"%+"%       L,,cj3 -     rF   c                 L   | j         rt          j        d          | j        }|st          j        d          |j        }|t          k    rd S |t          k    rt          j        || j	                  |t          k    rt          j        d          t          j        d          )Nr   zno result availabler   r   z*the last operation didn't produce a result)rT   r   r   rL   r   r\   rn   r   r   r   r   r   )rC   rq   r\   s      rD   _check_result_for_fetchz"BaseCursor._check_result_for_fetch^  s    ; 	;"#9:::m 	<$%:;;;YF{""%cDNCCCC'''#$6777$%QRRRrF   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 )r\   r   r   r   r   r   r   r   r   r[   r]   r   s      rD   r   zBaseCursor._check_copy_resulto  s     W( 2 2F{""%ft~FFFF$L/1}V/D/D/IL L  rF   valuemodec                     |                                   | j        sJ |dk    r| j        |z   }n|dk    r|}nt          d| d          d|cxk    r| j        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   rL   rM   
ValueErrorr   
IndexError)rC   r   r   newposs       rD   _scrollzBaseCursor._scroll~  s    $$&&&}:Y&FFZFFW$WWWXXXF2222T]222224555			rF   c                 @    |                      d           d| _        dS )z3Non-blocking part of closing. Common to sync/async.F)rG   TN)rA   r?   rc   s    rD   _closezBaseCursor._close  s#     	&&&rF   c                 *    t          | j                  S re   )r'   r4   rc   s    rD   r   zBaseCursor._encoding  s    t|,,,rF   )Tre   rH   N)r   r.   rH   N)D__name__rY   rZ   split	__slots__r   r[   __annotations__r   r   r   rE   boolrA   strra   propertyr5   r   r;   r<   rT   r
   r	   r!   rr   intrt   rw   r   r   rz   r   r   r   r   r   r   r   r   r   r   r   r$   r   r   r(   bytesr   r   r   r   r   r   r   r   r   r   Formatr   r   r   r   r   r   r  r	  r   ri   rF   rD   r1   r1   3   sG        
 EGG  J	}>    
 
$ 
$ 
 
 
 
	># 	> 	> 	> 	> N    X %+    X     X Xd6l3    X$ #    X -8C= - - - X-8C= T     # x}     $    4 -x} - - - X-"# " " " " $(5
 #'!%5 5 55  5
 $5 5 
t5 5 5 56"5"5(0(8"5EI"5	t"5 "5 "5 "5H#5#5(0(8#5EI#5	t#5 #5 #5 #5R #'!%) ) )) $	)
 ) 
xZ()	*) ) ) )X =A6 6 6+3D>6	w~	6 6 6 6 $(&
 "&& & &&  &
 & 
t& & & &/$ /5*9M3N / / / /6- -(5/ -U4[ - - - -  <@' ''(0(8'	t' ' ' 'B  %!%+1 +1 +1+1 	+1
 +1 
+1 +1 +1 +1\ 8< $,V$4	   ,d:&6 ,4 , , , ,
 x    & 590 00&ry10	0 0 0 08>$z2B >t > > > >,R% R R$ R R R R LP   -:B4.	   .S S S S"   S          -3 - - - X- - -rF   r1   c                       e Zd ZdZdZed2d            Zedddee         fd            Zd	d
dddeee                  f fdZde	fdZ
deee                  dee         dee         dd	fdZd3dZedee         fd            Zej        dee         dd	fd            Zdee         fdZ	 d4d	d	ddedee         dee         dee         de	f
dZdddedee         dedd	fd Z	 d4d	d!dedee         dee         dee         fd"Zdee         fd#Zd5d%edee         fd&Z dee         fd'Z!dee         fd(Z"d6d*ed+e#dd	fd,Z$e%	 d4d	d-d.edee         d/ee&         dee'         fd0            Z(d3d1Z) xZ*S )7Cursorpsycopgri   r5   Connection[Row]c                     d S re   ri   rB   s     rD   rE   zCursor.__init__  s    7:srF   Connection[Any]row_factoryc                    d S re   ri   )rC   r5   r  s      rD   rE   zCursor.__init__  s	     srF   N)r  c                f    t                                          |           |p|j        | _        d S re   )superrE   r  _row_factory)rC   r5   r  rX   s      rD   rE   zCursor.__init__  s3     	$$$'A:+ArF   rH   c                     | S re   ri   rc   s    rD   	__enter__zCursor.__enter__  s    rF   exc_typeexc_valexc_tbc                 .    |                                   d S re   )close)rC   r#  r$  r%  s       rD   __exit__zCursor.__exit__  s     	

rF   c                 .    |                                   dS )zI
        Close the current cursor and free associated resources.
        N)r	  rc   s    rD   r'  zCursor.close  s     	rF   c                     | j         S )z9Writable attribute to control how result rows are formed.r   rc   s    rD   r  zCursor.row_factory  s       rF   c                 F    || _         | j        r ||           | _        d S d S re   )r   rL   r3   )rC   r  s     rD   r  zCursor.row_factory  s3    '= 	/([..DNNN	/ 	/rF   c                 ,    |                      |           S re   r+  rc   s    rD   r   zCursor._make_row_maker  s      &&&rF   r   r   r   r   r   c          	         	 | j         j        5  | j                             |                     ||||                     ddd           n# 1 swxY w Y   n,# t          j        $ r}|                    d          d}~ww xY w| S )z=
        Execute a query or command to the database.
        r   N)r7   lockwaitr   r   _NO_TRACEBACKwith_traceback)rC   r   r   r   r   exs         rD   r)   zCursor.execute  s    	*  
%%eVWV%TT                  	* 	* 	*##D)))	*s:   A 2A A AA AA B'A<<BF)r   r   r   c          	         	 t          j                    r| j        j        5  | j        j        }|r/| j                            |                     |||                     ddd           n# 1 swxY w Y   |s| j                                        5  | j        j        5  | j                            |                     |||                     ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   dS dS dS | j        j        5  | j                            |                     |||                     ddd           dS # 1 swxY w Y   dS # t          j
        $ r}|                    d          d}~ww xY w)zI
        Execute the same command with a sequence of input data.
        N)r&   is_supportedr7   r/  r   r0  r   r   r   r   r1  r2  )rC   r   r   r   pr3  s         rD   executemanyzCursor.executemany  s   	*$&&  Z_  
,A 
 ::5*iXX                  ,,..  
  
 ::5*iXX                                   
 Z_  JOO99%YWW                     	* 	* 	*##D)))	*s   E >A+E +A//E 2A/3E C10CC1C	C1!C	"C1%E 1C55E 8C59E E 0E>E EE EE F'E<<Fr   c             #     K   | j         j        rt          j        d          | j        j        5  	 | j                            |                     |||                     d}| j                            |                     |                    rS| j	        
                    d| j                  }|V  d}| j                            |                     |                    Sn,# t          j        $ r}|                    d          d}~ww xY w| j         j        t          k    r| j                                         	 | j                            |                     d                    r/	 | j                            |                     d                    /n# t"          $ r Y nw xY w	 | j                            |                     d                     n# t"          $ r Y nw xY wn# | j         j        t          k    r| j                                         	 | j                            |                     d                    r/	 | j                            |                     d                    /n# t"          $ r Y nw xY w	 | j                            |                     d                     w # t"          $ r Y w w xY ww xY wddd           dS # 1 swxY w Y   dS )zC
        Iterate row-by-row on a result from the database.
        z(stream() cannot be used in pipeline moder   Tr   FN)r   )r4   pipeline_statusr   r   r7   r/  r0  r   r   r2   load_rowr3   r1  r2  transaction_statusACTIVEcancel	Exception)rC   r   r   r   r   recr3  s          rD   streamzCursor.stream  sY      <' 	Q$%OPPPZ_ 	 	
 5 5eVF 5 S STTTjood&?&?&F&FGG "#x00DNCCCIII!E	 jood&?&?&F&FGG " ? . . .''---. <2f<< J%%'''"jood.G.Ge.G.T.TUU !  #jood.G.Ge.G.T.TUU !$   

(A(A(A(N(NOOOO$    =4<2f<< J%%'''"jood.G.Ge.G.T.TUU !  #jood.G.Ge.G.T.TUU !$   

(A(A(A(N(NOOOO$    =	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   KB2C$#G.$D3DDG..K?AFK
F*'K)F**K..GK
G*'K)G**K./KAI<;K<
J		KJ			K.J<;K<
K		KK			KKK!$K!c                     |                                   |                                  | j                            | j        | j                  }|| xj        dz  c_        |S )z
        Return the next record from the current recordset.

        Return `!None` the recordset is finished.

        :rtype: Optional[Row], with Row defined by `row_factory`
        Nr   )_fetch_pipeliner   r2   r:  rM   r3   )rC   records     rD   fetchonezCursor.fetchone-  s]     	$$&&&""49dn==IINIIrF   r   r|   c                 @   |                                   |                                  | j        sJ |s| j        }| j                            | j        t          | j        |z   | j        j                  | j	                  }| xj        t          |          z  c_        |S )z
        Return the next `!size` records from the current recordset.

        `!size` default to `!self.arraysize` if not specified.

        :rtype: Sequence[Row], with Row defined by `row_factory`
        )rB  r   rL   r>   r2   	load_rowsrM   minr   r3   r   )rC   r|   recordss      rD   	fetchmanyzCursor.fetchmany<  s     	$$&&&} 	">D($$I	D $-"788N
 

 			S\\!		rF   c                     |                                   |                                  | j        sJ | j                            | j        | j        j        | j                  }| j        j        | _        |S )z
        Return all the remaining records from the current recordset.

        :rtype: Sequence[Row], with Row defined by `row_factory`
        )rB  r   rL   r2   rF  rM   r   r3   )rC   rH  s     rD   fetchallzCursor.fetchallR  si     	$$&&&}($$TY0Et~VVM)	rF   c              #       K                                                                        dt          dt          t                   f fd}	  | j                  }|d S  xj        dz  c_        |V  ))NposrH   c                 D    j                             | j                  S re   )r2   r:  r3   )rM  rC   s    rD   loadzCursor.__iter__.<locals>.loadc  s    8$$S$.999rF   Tr   )rB  r   r  r
   r   rM   )rC   rO  rows   `  rD   __iter__zCursor.__iter___  s      $$&&&	:c 	:hsm 	: 	: 	: 	: 	: 	:	$ty//C{IINIIIII	rF   r  r   r   c                 Z    |                                   |                     ||           dS )a  
        Move the cursor in the result set to a new position according to mode.

        If `!mode` is ``'relative'`` (default), `!value` is taken as offset to
        the current position in the result set; if set to ``'absolute'``,
        `!value` states an absolute target position.

        Raise `!IndexError` in case a scroll operation would leave the result
        set. In this case the position will not change.
        N)rB  r  )rC   r   r   s      rD   scrollzCursor.scrollm  s0     	UD!!!!!rF   writerr   rU  c             #     K   	 | j         j        5  | j                             |                     ||                     ddd           n# 1 swxY w Y   t	          | |          5 }|V  ddd           n# 1 swxY w Y   n,# t
          j        $ r}|                    d          d}~ww xY w|                     d           dS )zk
        Initiate a :sql:`COPY` operation and return an object to manage it.

        :rtype: Copy
        NrT  r   )	r7   r/  r0  r   r   r   r1  r2  r   )rC   r   r   rU  copyr3  s         rD   rW  zCursor.copy{  sa     	* I I
 4 4Y G GHHHI I I I I I I I I I I I I I I d6*** d


               	* 	* 	*##D)))	*
 	##A&&&&&s]   B /AB AB AB 'A8,B 8A<<B ?A< B B-B((B-c                    | j         durr| j        sm| j        j        rc| j        j        5  | j                            | j        j                            d                     d d d            d S # 1 swxY w Y   d S d S d S d S )NFTr   )rP   rL   r7   r   r/  r0  r   rc   s    rD   rB  zCursor._fetch_pipeline  s    $E11M 2
$ 2  M M

 4 ? ?d ? K KLLLM M M M M M M M M M M M M M M M M M	 211111s   9A//A36A3)r5   r  r  re   )r   )r  )+r  rY   rZ   r  r   rE   r   r   r
   r"   r"  r   BaseExceptionr   r(  r'  r  r  setterr   r   r   r   r  r)   r   r7  r   r@  rD  r  r	   rI  rK  rQ  r  rS  r   
CopyWriterr   rW  rB  __classcell__)rX   s   @rD   r  r    s       JI::: X:+=G_   X 26	B B B%B jo.	B B B B B B4    4./ -( '	
 
       !Z_ ! ! ! X! /z# /4 / / / /
'# ' ' ' ' $(
 #'!%    
 $  
   2   *  *  * * V$ *
  * 
 *  *  *  *J $(*
 "&* * **  *
 * 
#* * * *X(3-     c $s)    ,$s)    (3-    " "C "s "D " " " "  $('
 (,' ' ''  '
 $' 
$' ' ' ^'2M M M M M M M MrF   r  r  N)R__doc__	functoolsr   r   r   typingr   r   r   r   r	   r
   r   r   r   r   r   r   warningsr   
contextlibr    r   r   r   r   abcr   r   r   r   rW  r   r   r[  rowsr   r   r   _columnr!   _compatr"   pq.miscr#   _queriesr$   r%   r   r&   
_encodingsr'   
_preparingr(   
generatorsr)   r*   r+   r,   pq.abcr-   r.   r5   r/   r  r8   r   r[   r   r   rn   r   r   r   r   ro   r   TransactionStatusr<  r1   r  ri   rF   rD   <module>rn     sD                9 9 9 9 9 9 9 9 9 9 9 9 9 9 < < < < < < < < < < < < < < * * * * * * * *       % % % % % %                   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 			$a	- a	- a	- a	- a	-,- a	- a	- a	-HEM EM EM EM EMZ)3./ EM EM EM EM EMrF   