o
    =a_                     @   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 dd
lm	Z	 d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+mariadbconnector
    :name: MariaDB Connector/Python
    :dbapi: mariadb
    :connectstring: mariadb+mariadbconnector://<user>:<password>@<host>[:<port>]/<dbname>
    :url: https://pypi.org/project/mariadb/

Driver Status
-------------

MariaDB Connector/Python enables Python programs to access MariaDB and MySQL
databases using an API which is compliant with the Python DB API 2.0 (PEP-249).
It is written in C and uses MariaDB Connector/C client library for client server
communication.

Note that the default driver for a ``mariadb://`` connection URI continues to
be ``mysqldb``. ``mariadb+mariadbconnector://`` is required to use this driver.

.. mariadb: https://github.com/mariadb-corporation/mariadb-connector-python

    N   )MySQLCompiler)MySQLDialect)MySQLExecutionContext)MySQLIdentifierPreparer   )sql)util)r   r   r   c                   @   s   e Zd Zdd Zdd ZdS )&MySQLExecutionContext_mariadbconnectorc                 C      | j jddS )NFbuffered_dbapi_connectioncursorself r   `/var/www/html/gps/gps/lib/python3.10/site-packages/sqlalchemy/dialects/mysql/mariadbconnector.pycreate_server_side_cursor+      z@MySQLExecutionContext_mariadbconnector.create_server_side_cursorc                 C   r   )NTr   r   r   r   r   r   create_default_cursor.   r   z<MySQLExecutionContext_mariadbconnector.create_default_cursorN)__name__
__module____qualname__r   r   r   r   r   r   r
   *   s    r
   c                   @      e Zd ZdS )MySQLCompiler_mariadbconnectorNr   r   r   r   r   r   r   r   2       r   c                   @   r   )(MySQLIdentifierPreparer_mariadbconnectorNr   r   r   r   r   r   6   r   r   c                       s   e Zd ZdZdZdZdZdZdZdZ	dZ
dZeZeZeZdZejdd Z fddZed	d
 Z fddZdd Zdd Zdd Zeg dZ fddZdd Z dd Z!	dddZ"	dddZ#  Z$S ) MySQLDialect_mariadbconnectormariadbconnectorTutf8mb4qmarkc                 C   s4   | j rt| j drtdd td| j jD S dS )N__version__c                 S   s   g | ]}t |qS r   )int.0xr   r   r   
<listcomp>Y   s    z@MySQLDialect_mariadbconnector._dbapi_version.<locals>.<listcomp>z(\d+)(?:[-\.]?|$))c   r*   r*   )dbapihasattrtuplerefindallr$   r   r   r   r   _dbapi_versionU   s   	z,MySQLDialect_mariadbconnector._dbapi_versionc                    sT   t t| jdi | d| _| jd ur&| jtk r(tdddd tD  d S d S )Nr#   z?The minimum required version for MariaDB Connector/Python is %s.c                 s   s    | ]}t |V  qd S )N)strr&   r   r   r   	<genexpr>k   s    z9MySQLDialect_mariadbconnector.__init__.<locals>.<genexpr>r   )	superr    __init__
paramstyler+   r0   mariadb_cpy_minimum_versionNotImplementedErrorjoin)r   kwargs	__class__r   r   r5   c   s   

z&MySQLDialect_mariadbconnector.__init__c                 C   s   t dS )Nmariadb)
__import__)clsr   r   r   r+   n   s   z#MySQLDialect_mariadbconnector.dbapic                    sF   t t| |||rdS t|| jjr!t| }d|v p d|v S dS )NTznot connectedzisn't validF)r4   r    is_disconnect
isinstancer+   Errorr2   lower)r   e
connectionr   str_er;   r   r   r@   r   s   
z+MySQLDialect_mariadbconnector.is_disconnectc              	   C   s   |  }g d}g d}|D ]	}t||t q|D ]	}t||t q|dd}| jd urSzt| jjd j	j
}||jO }W n ttfyN   d| _Y nw ||d< g |gS )N)connect_timeoutread_timeoutwrite_timeoutclient_flagport	pool_size)local_infilessl_verify_certsslpool_reset_connectionrJ   r   z.constants.CLIENTF)translate_connect_argsr	   coerce_kw_typer%   boolgetr+   r>   r   	constantsCLIENT
FOUND_ROWSAttributeErrorImportErrorsupports_sane_rowcount)r   urlopts
int_paramsbool_paramskeyrJ   CLIENT_FLAGSr   r   r   create_connect_args}   s*   


z1MySQLDialect_mariadbconnector.create_connect_argsc                 C   s   z|j }W |S    d}Y |S )N)errno)r   	exceptionrcr   r   r   _extract_error_code   s   z1MySQLDialect_mariadbconnector._extract_error_codec                 C   s   dS )Nr"   r   )r   rE   r   r   r   _detect_charset   s   z-MySQLDialect_mariadbconnector._detect_charset)SERIALIZABLEzREAD UNCOMMITTEDzREAD COMMITTEDzREPEATABLE READ
AUTOCOMMITc                    s.   |dkr	d|_ d S d|_ tt| || d S )Nri   TF)
autocommitr4   r    _set_isolation_level)r   rE   levelr;   r   r   rk      s   

z2MySQLDialect_mariadbconnector._set_isolation_levelc              	   C   s&   | tdtjd|dd d S )NzXA BEGIN :xidxidTliteral_executeexecuter   text
bindparams	bindparamr   rE   rm   r   r   r   do_begin_twophase   s
   
z/MySQLDialect_mariadbconnector.do_begin_twophasec              	   C   sH   | tdtjd|dd | tdtjd|dd d S )NXA END :xidrm   Trn   zXA PREPARE :xidrp   ru   r   r   r   do_prepare_twophase   s   

z1MySQLDialect_mariadbconnector.do_prepare_twophaseFc              	   C   sL   |s| tdtjd|dd | tdtjd|dd d S )Nrw   rm   Trn   zXA ROLLBACK :xidrp   r   rE   rm   is_preparedrecoverr   r   r   do_rollback_twophase   s   

z2MySQLDialect_mariadbconnector.do_rollback_twophasec              	   C   s6   |s|  || |tdtjd|dd d S )NzXA COMMIT :xidrm   Trn   )rx   rq   r   rr   rs   rt   ry   r   r   r   do_commit_twophase   s   
z0MySQLDialect_mariadbconnector.do_commit_twophase)TF)%r   r   r   driversupports_statement_cachesupports_unicode_statementsencodingconvert_unicoderZ   supports_sane_multi_rowcountsupports_native_decimaldefault_paramstyler
   execution_ctx_clsr   statement_compilerr   preparersupports_server_side_cursorsr	   memoized_propertyr0   r5   classmethodr+   r@   ra   rf   rg   set_isolation_lookuprk   rv   rx   r|   r}   __classcell__r   r   r;   r   r    :   sB    

%
	
r    )__doc__r.   baser   r   r   r    r   r	   r7   r
   r   r   r    dialectr   r   r   r   <module>   s    4