o
    ga                     @   s   d Z ddl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
G dd deZG dd deZeZdS )a  
.. dialect:: mysql+mysqlconnector
    :name: MySQL Connector/Python
    :dbapi: myconnpy
    :connectstring: mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>
    :url: https://pypi.org/project/mysql-connector-python/

.. note::

    The MySQL Connector/Python DBAPI has had many issues since its release,
    some of which may remain unresolved, and the mysqlconnector dialect is
    **not tested as part of SQLAlchemy's continuous integration**.
    The recommended MySQL dialects are mysqlclient and PyMySQL.

    N   )BIT)MySQLCompiler)MySQLDialect)MySQLIdentifierPreparer   )utilc                   @      e Zd Zdd ZdS )MySQLCompiler_mysqlconnectorc                 K   s,   | j |jfi |d | j |jfi | S )Nz % )processleftright)selfbinaryoperatorkw r   b/var/www/html/api-tag/env/lib/python3.10/site-packages/sqlalchemy/dialects/mysql/mysqlconnector.pyvisit_mod_binary$   s   z-MySQLCompiler_mysqlconnector.visit_mod_binaryN)__name__
__module____qualname__r   r   r   r   r   r
   #       r
   c                   @   s.   e Zd Zedd Zejdd Zdd ZdS )&MySQLIdentifierPreparer_mysqlconnectorc                 C      dS )NFr   )r   r   r   r   _double_percents-      z7MySQLIdentifierPreparer_mysqlconnector._double_percentsc                 C   s   d S Nr   r   valuer   r   r   r   1   r   c                 C   s   | | j| j}|S r   )replaceescape_quoteescape_to_quoter   r   r   r   _escape_identifier5   s   z9MySQLIdentifierPreparer_mysqlconnector._escape_identifierN)r   r   r   propertyr   setterr#   r   r   r   r   r   ,   s    

r   c                   @   r	   )_myconnpyBITc                 C   r   )z0MySQL-connector already converts mysql bits, so.Nr   )r   dialectcoltyper   r   r   result_processor;   s   z_myconnpyBIT.result_processorN)r   r   r   r)   r   r   r   r   r&   :   r   r&   c                       s   e Zd ZdZdZdZdZdZdZe	Z
eZeejeeiZedd Zdd Zdd	 Zejd
d Zdd Zdd Zdd ZdddZdddZh dZ fddZ  Z S )MySQLDialect_mysqlconnectormysqlconnectorTformatc                 C   s   ddl m} |S )Nr   )	connector)mysqlr-   )clsr-   r   r   r   import_dbapiQ   s   z(MySQLDialect_mysqlconnector.import_dbapic                 C   s   | d dS )NFT)ping)r   dbapi_connectionr   r   r   do_pingW   s   
z#MySQLDialect_mysqlconnector.do_pingc                 C   sv  |j dd}||j t|dt t|dt t|dt t|dt t|dt t|dt t|d	t t|d
t t|dt t|dt t|dt t|dt t|dt t|dt t|dt t|dt t|dt |dd | jd urzddl	m
} |d| }||jO }||d< W g |gS  ty   Y g |gS w g |gS )Nuser)usernameallow_local_infile
autocommitbufferedclient_flagcompressconnection_timeoutconnect_timeoutconsume_results
force_ipv6get_warningspool_reset_session	pool_sizeraise_on_warningsrawssl_verify_certuse_pureuse_unicodeTr   )
ClientFlagclient_flags)translate_connect_argsupdatequeryr   coerce_kw_typeboolint
setdefaultdbapimysql.connector.constantsrG   getget_default
FOUND_ROWS	Exception)r   urloptsrG   rH   r   r   r   create_connect_args[   sD   


z/MySQLDialect_mysqlconnector.create_connect_argsc                 C   sN   | j r!t| j dr#td| j j}|r%tdd |dddD S d S d S d S )N__version__z(\d+)\.(\d+)(?:\.(\d+))?c                 s   s     | ]}|d urt |V  qd S r   )rN   ).0xr   r   r   	<genexpr>   s    zKMySQLDialect_mysqlconnector._mysqlconnector_version_info.<locals>.<genexpr>r      r   )rP   hasattrrematchrY   tuplegroup)r   mr   r   r   _mysqlconnector_version_info   s   z8MySQLDialect_mysqlconnector._mysqlconnector_version_infoc                 C   s   |j jS r   )
connectioncharset)r   re   r   r   r   _detect_charset      z+MySQLDialect_mysqlconnector._detect_charsetc                 C   s   |j S r   )errno)r   	exceptionr   r   r   _extract_error_code   s   z/MySQLDialect_mysqlconnector._extract_error_codec                 C   sD   d}| j j| j jf}t||r |j|v pdt|v pdt|v S dS )N)i  i  i  i  i  i   zMySQL Connection not available.z$Connection to MySQL is not availableF)rP   OperationalErrorInterfaceError
isinstanceri   str)r   ere   cursorerrnos
exceptionsr   r   r   is_disconnect   s   



z)MySQLDialect_mysqlconnector.is_disconnectNc                 C      |  S r   )fetchallr   rprf   r   r   r   _compat_fetchall   rh   z,MySQLDialect_mysqlconnector._compat_fetchallc                 C   ru   r   )fetchonerw   r   r   r   _compat_fetchone   rh   z,MySQLDialect_mysqlconnector._compat_fetchone>   READ COMMITTEDREPEATABLE READREAD UNCOMMITTED
AUTOCOMMITSERIALIZABLEc                    s*   |dkr	d|_ d S d|_ t || d S )Nr   TF)r7   super_set_isolation_level)r   re   level	__class__r   r   r      s   
z0MySQLDialect_mysqlconnector._set_isolation_levelr   )!r   r   r   driversupports_statement_cachesupports_sane_rowcountsupports_sane_multi_rowcountsupports_native_decimaldefault_paramstyler
   statement_compilerr   preparerr   update_copyr   colspecsr   r&   classmethodr0   r3   rX   memoized_propertyrd   rg   rk   rt   ry   r{   _isolation_lookupr   __classcell__r   r   r   r   r*   A   s.    
*


r*   )__doc__r_   baser   r   r   r    r   r
   r   r&   r*   r'   r   r   r   r   <module>   s   		s