U
    h                     @  s   d 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
 dd
lmZ ddlmZ ddlmZ erd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 G dd deZG dd deZeZdS )a  

.. dialect:: mysql+cymysql
    :name: CyMySQL
    :dbapi: cymysql
    :connectstring: mysql+cymysql://<username>:<password>@<host>/<dbname>[?<options>]
    :url: https://github.com/nakagami/CyMySQL

.. note::

    The CyMySQL dialect is **not tested as part of SQLAlchemy's continuous
    integration** and may have unresolved issues.  The recommended MySQL
    dialects are mysqlclient and PyMySQL.

    )annotations)Any)Iterable)Optional)TYPE_CHECKING)Union   )MySQLDialect)MySQLDialect_mysqldb)BIT   )util)
Connection)DBAPIConnection)DBAPICursor)DBAPIModule)Dialect)PoolProxiedConnection)_ResultProcessorTypec                   @  s   e Zd ZddddddZdS )_cymysqlBITr   objectz#Optional[_ResultProcessorType[Any]])dialectcoltypereturnc                 C  s   ddddd}|S )z@Convert MySQL's 64 bit, variable length binary string to a long.zOptional[Iterable[int]]zOptional[int])valuer   c                 S  s.   | d k	r*d}t | D ]}|d> |B }q|S | S )Nr      )iter)r   vi r   E/tmp/pip-unpacked-wheel-y9ln43lq/sqlalchemy/dialects/mysql/cymysql.pyprocess4   s    z-_cymysqlBIT.result_processor.<locals>.processr   )selfr   r   r!   r   r   r    result_processor/   s    z_cymysqlBIT.result_processorN)__name__
__module____qualname__r#   r   r   r   r    r   .   s   r   c                   @  s|   e Zd ZdZdZdZdZdZdZe	
ejeeiZeddddZd	d
dddZdddddZdddddddZdS )MySQLDialect_cymysqlcymysqlTNFr   )r   c                 C  s   t dS )Nr(   )
__import__)clsr   r   r    import_dbapiJ   s    z!MySQLDialect_cymysql.import_dbapir   str)
connectionr   c                 C  s   |j jS N)r-   charset)r"   r-   r   r   r    _detect_charsetN   s    z$MySQLDialect_cymysql._detect_charsetzDBAPIModule.Errorint)	exceptionr   c                 C  s   |j S r.   )errno)r"   r2   r   r   r    _extract_error_codeQ   s    z(MySQLDialect_cymysql._extract_error_codez7Optional[Union[PoolProxiedConnection, DBAPIConnection]]zOptional[DBAPICursor]bool)er-   cursorr   c                 C  s6   t || jjr| |dkS t || jjr.dS dS d S )N)i  i  i  i  i  TF)
isinstanceZloaded_dbapiZOperationalErrorr4   ZInterfaceError)r"   r6   r-   r7   r   r   r    is_disconnectT   s
    z"MySQLDialect_cymysql.is_disconnect)r$   r%   r&   ZdriverZsupports_statement_cacheZdescription_encodingZsupports_sane_rowcountZsupports_sane_multi_rowcountZsupports_unicode_statementsr   Zupdate_copyr	   Zcolspecsr   r   classmethodr+   r0   r4   r9   r   r   r   r    r'   ?   s   r'   N)__doc__
__future__r   typingr   r   r   r   r   baser	   Zmysqldbr
   typesr    r   Zengine.baser   Zengine.interfacesr   r   r   r   r   Zsql.type_apir   r   r'   r   r   r   r   r    <module>   s*   +