o
    "4g
                     @  s   d Z ddlmZ ddl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 ddlmZ erFddlmZ G dd dZG dd deee ZG dd deee ZG dd deZdS )z#
CockroachDB-specific connections.
    )annotationsN)AnyTYPE_CHECKING   )errors)Row)
Connection)AdaptersMap)ConnectionInfo)AsyncConnection   )adapters)PGconnc                   @  sR   e Zd ZU ded< ded< edd	d
ZedddZedddZdddZ	dS )_CrdbConnectionMixinzAdaptersMap | None	_adaptersr   pgconnconn/Connection[Any] | AsyncConnection[Any] | PGconnreturnboolc                 C  s"   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   r   parameter_status)clsr    r   ]/var/www/html/notificationserver/venv/lib/python3.10/site-packages/psycopg/crdb/connection.pyis_crdb   s   z_CrdbConnectionMixin.is_crdbr	   c                 C  s   | j stt| _ | j S N)r   r	   r   selfr   r   r   r   &   s   
z_CrdbConnectionMixin.adaptersCrdbConnectionInfoc                 C  s
   t | jS r   )r   r   r   r   r   r   info.   s   
z_CrdbConnectionMixin.infoNonec                 C  s   |  | jrtdd S )Nz/CockroachDB doesn't support prepared statements)r   r   eNotSupportedErrorr   r   r   r   
_check_tpc2   s   
z_CrdbConnectionMixin._check_tpcN)r   r   r   r   )r   r	   )r   r   )r   r!   )
__name__
__module____qualname____annotations__classmethodr   propertyr   r    r$   r   r   r   r   r      s   
 	r   c                   @     e Zd ZdZdZdS )CrdbConnectionz=
    Wrapper for a connection to a CockroachDB database.
    psycopg.crdbNr%   r&   r'   __doc__r   r   r   r   r,   7       r,   c                   @  r+   )AsyncCrdbConnectionzD
    Wrapper for an async connection to a CockroachDB database.
    r-   Nr.   r   r   r   r   r1   ?   r0   r1   c                   @  s>   e Zd ZdZdZedddZeddd	ZedddZdS )r   zV
    `~psycopg.ConnectionInfo` subclass to get info about a CockroachDB database.
    r-   r   strc                 C  s   dS )NCockroachDBr   r   r   r   r   vendorN   s   zCrdbConnectionInfo.vendorintc                 C  s>   |  d}|std| |}|du rt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   r"   InternalErrorparse_crdb_versionInterfaceError)r   sververr   r   r   server_versionR   s   


z!CrdbConnectionInfo.server_versionr:   
int | Nonec                 C  sF   t d|}|s
d S t|dd t|dd  t|d S )Nz\bv(\d+)\.(\d+)\.(\d+)r   i'  r   d      )researchr5   group)r   r:   mr   r   r   r8   c   s   2z%CrdbConnectionInfo.parse_crdb_versionN)r   r2   )r   r5   )r:   r2   r   r=   )	r%   r&   r'   r/   r*   r4   r<   r)   r8   r   r   r   r   r   G   s    r   )r/   
__future__r   r@   typingr   r    r   r"   rowsr   
connectionr   _adapters_mapr	   _connection_infor
   connection_asyncr   _typesr   pq.abcr   r   r,   r1   r   r   r   r   r   <module>   s"    