
    *Jf                     \   d Z ddl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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 ddlmZ erddlm Z  ddl!m"Z" ddl#m$Z$  G d d          Z% G d de%ee                   Z& G d de%ee                   Z' G d de          Z(dS )z#
CockroachDB-specific connections.
    N)AnyOptionalTypeUnionoverloadTYPE_CHECKING   )errors)AdaptContext)Row
RowFactoryAsyncRowFactoryTupleRow)Self)
Connection)AdaptersMap)ConnectionInfo)AsyncConnection   )adapters)PGconn)Cursor)AsyncCursorc                       e Zd ZU ee         ed<   ded<   edeee	         e
e	         df         defd            Zedefd            Zedd	            ZddZd
S )_CrdbConnectionMixin	_adaptersr   pgconnconnreturnc                     t          |t          t          f          r|j        }t	          |                    d                    S )zS
        Return `!True` if the server connected to `!conn` is CockroachDB.
        s   crdb_version)
isinstancer   r   r   boolparameter_status)clsr   s     Z/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/psycopg/crdb/connection.pyis_crdbz_CrdbConnectionMixin.is_crdb   s>     dZ9:: 	;DD))/::;;;    c                 P    | j         st          t                    | _         | j         S N)r   r   r   selfs    r%   r   z_CrdbConnectionMixin.adapters*   s#    ~ 	3(22DN~r'   CrdbConnectionInfoc                 *    t          | j                  S r)   )r,   r   r*   s    r%   infoz_CrdbConnectionMixin.info2   s    !$+...r'   Nc                 b    |                      | j                  rt          j        d          d S )Nz/CockroachDB doesn't support prepared statements)r&   r   eNotSupportedErrorr*   s    r%   
_check_tpcz_CrdbConnectionMixin._check_tpc6   s7    <<$$ 	Y%&WXXX	Y 	Yr'   )r   r,   )r   N)__name__
__module____qualname__r   r   __annotations__classmethodr   r   r   r   r"   r&   propertyr   r.   r2    r'   r%   r   r      s         $$$$	<C/#*>HI	<		< 	< 	< [	< +    X / / / X/Y Y Y Y Y Yr'   r   c                   R    e Zd ZdZdZee	 ddddddded	ed
ee	         de
e         ddde
e         dedeef         ddfd                        Zee	 ddddddded	ede
e         ddde
e         dedeef         ddfd                        Zeddededef fd            Z xZS )CrdbConnectionz=
    Wrapper for a connection to a CockroachDB database.
    psycopg.crdb F   N
autocommitprepare_thresholdcursor_factorycontextconninfor@   row_factoryrA   rB   zOptional[Type[Cursor[Row]]]rC   kwargsr   zCrdbConnection[Row]c                    d S r)   r9   )r$   rD   r@   rE   rA   rB   rC   rF   s           r%   connectzCrdbConnection.connectE   s	     !$r'   zOptional[Type[Cursor[Any]]]zCrdbConnection[TupleRow]c                    d S r)   r9   r$   rD   r@   rA   rB   rC   rF   s          r%   rH   zCrdbConnection.connectS   s	     &)Sr'   c                 8     t                      j        |fi |S )zZ
        Connect to a database server and return a new `CrdbConnection` instance.
        superrH   r$   rD   rF   	__class__s      r%   rH   zCrdbConnection.connect`   s#    
 uwwx226222r'   r=   )r3   r4   r5   __doc__r   r7   strr"   r   r   r   intr   r   rH   r   r   __classcell__rO   s   @r%   r;   r;   ;   s          J
  
$ !+,8<*.
$ 
$ 
$
$ 	
$
  _
$ $C=
$ 6
$ ,'
$ c3'
$ 

$ 
$ 
$ [ X
$  	) !+,8<*.	) 	) 	)	) 		)
 $C=	) 6	) ,'	) c3'	) 
$	) 	) 	) [ X	) 3 3s 33 34 3 3 3 3 3 [3 3 3 3 3r'   r;   c                   R    e Zd ZdZdZee	 ddddddded	ed
ee	         de
e         dddee         dede	ef         ddfd                        Zee	 ddddddded	ed
ee	         dddee         dede	ef         ddfd                        Zeddededef fd            Z xZS )AsyncCrdbConnectionzD
    Wrapper for an async connection to a CockroachDB database.
    r<   r=   Fr>   Nr?   rD   r@   rA   rE   rB   z Optional[Type[AsyncCursor[Row]]]rC   rF   r   zAsyncCrdbConnection[Row]c                
   K   d S r)   r9   )r$   rD   r@   rA   rE   rB   rC   rF   s           r%   rH   zAsyncCrdbConnection.connectr   s       &)Sr'   z Optional[Type[AsyncCursor[Any]]]zAsyncCrdbConnection[TupleRow]c                
   K   d S r)   r9   rJ   s          r%   rH   zAsyncCrdbConnection.connect   s       +.#r'   c                 H   K    t                      j        |fi | d {V S r)   rL   rN   s      r%   rH   zAsyncCrdbConnection.connect   s7      $UWW_X88888888888r'   rP   )r3   r4   r5   rQ   r   r7   rR   r"   r   rS   r   r   r   r   rH   r   r   rT   rU   s   @r%   rW   rW   h   s          J
  
) !+,=A*.
) 
) 
)
) 	
)
 $C=
) %S)
) ;
) ,'
) c3'
) 
$
) 
) 
) [ X
)  	. !+,=A*.	. 	. 	.	. 		.
 $C=	. ;	. ,'	. c3'	. 
)	. 	. 	. [ X	. 9 9S 9 9 9 9 9 9 9 [9 9 9 9 9r'   rW   c                   z    e Zd ZdZdZedefd            Zedefd            Ze	dede
e         fd            ZdS )	r,   zV
    `~psycopg.ConnectionInfo` subclass to get info about a CockroachDB database.
    r<   r   c                     dS )NCockroachDBr9   r*   s    r%   vendorzCrdbConnectionInfo.vendor   s    }r'   c                     |                      d          }|st          j        d          |                     |          }|t          j        d|          |S )z
        Return the CockroachDB server version connected.

        Return a number in the PostgreSQL format (e.g. 21.2.10 -> 210210).
        crdb_versionz''crdb_version' parameter status not setNz)couldn't parse CockroachDB version from: )r#   r0   InternalErrorparse_crdb_versionInterfaceError)r+   sververs      r%   server_versionz!CrdbConnectionInfo.server_version   sh     $$^44 	M/"KLLL%%d++;"#Wt#W#WXXX
r'   rd   c                    t          j        d|          }|sd S t          |                    d                    dz  t          |                    d                    dz  z   t          |                    d                    z   S )Nz\bv(\d+)\.(\d+)\.(\d+)r   i'  r	   d      )researchrS   group)r+   rd   ms      r%   rb   z%CrdbConnectionInfo.parse_crdb_version   sk    I/66 	41771::&QWWQZZ3)>>QWWQZZPPr'   N)r3   r4   r5   rQ   r8   rR   r^   rS   rf   r7   r   rb   r9   r'   r%   r,   r,      s           J    X     X  Qs Qx} Q Q Q [Q Q Qr'   r,   ))rQ   rj   typingr   r   r   r   r   r   r=   r
   r0   abcr   rowsr   r   r   r   _compatr   
connectionr   _adapters_mapr   _connection_infor   connection_asyncr   _typesr   pq.abcr   cursorr   cursor_asyncr   r   r;   rW   r,   r9   r'   r%   <module>rz      s    
			 F F F F F F F F F F F F F F F F             = = = = = = = = = = = =       # # # # # # ' ' ' ' ' ' - - - - - - . . . . . .       +******Y Y Y Y Y Y Y YB*3 *3 *3 *3 *3):c? *3 *3 *3Z'9 '9 '9 '9 '9.0D '9 '9 '9T"Q "Q "Q "Q "Q "Q "Q "Q "Q "Qr'   