o
    Šåg¯!  ã                   @   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dl
mZ dZG dd„ dejej ƒ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)ÚUUIDé   )ÚMySQLCompiler)ÚMySQLDialect)ÚMySQLExecutionContexté   )Úsql)Úutil)Úsqltypes)r   r   r   c                   @   s   e Zd Zdd„ ZdS )Ú_MariaDBUUIDc                 C   s   | j r	dd„ }|S dd„ }|S )Nc                 S   s(   | d urt | dƒr|  d¡} t| ƒ} | S ©NÚdecodeÚascii)Úhasattrr   Ú_python_UUID©Úvalue© r   úf/var/www/html/flaskapp/venv/lib/python3.10/site-packages/sqlalchemy/dialects/mysql/mariadbconnector.pyÚprocess5   s
   

z._MariaDBUUID.result_processor.<locals>.processc                 S   s,   | d urt | dƒr|  d¡} tt| ƒƒ} | S r   )r   r   Ústrr   r   r   r   r   r   ?   s
   

)Úas_uuid)ÚselfÚdialectÚcoltyper   r   r   r   Úresult_processor2   s
   z_MariaDBUUID.result_processorN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   .   s    r   c                       s8   e Zd ZdZdd„ Zdd„ Z‡ fdd„Zdd	„ Z‡  ZS )
Ú&MySQLExecutionContext_mariadbconnectorNc                 C   ó   | j jdd�S )NF©Úbuffered©Ú_dbapi_connectionÚcursor©r   r   r   r   Úcreate_server_side_cursorL   ó   z@MySQLExecutionContext_mariadbconnector.create_server_side_cursorc                 C   r    )NTr!   r#   r&   r   r   r   Úcreate_default_cursorO   r(   z<MySQLExecutionContext_mariadbconnector.create_default_cursorc                    s8   t ƒ  ¡  | jj| _| jr| jjr| jj| _	d S d S d S ©N)
ÚsuperÚ	post_execr%   ÚrowcountÚ	_rowcountÚisinsertÚcompiledÚpostfetch_lastrowidÚ	lastrowidÚ
_lastrowidr&   ©Ú	__class__r   r   r,   R   s
   

ÿz0MySQLExecutionContext_mariadbconnector.post_execc                 C   s   | j S r*   )r3   r&   r   r   r   Úget_lastrowidZ   s   z4MySQLExecutionContext_mariadbconnector.get_lastrowid)	r   r   r   r3   r'   r)   r,   r6   Ú__classcell__r   r   r4   r   r   I   s    r   c                   @   s   e Zd ZdS )ÚMySQLCompiler_mariadbconnectorN)r   r   r   r   r   r   r   r8   ^   s    r8   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dZe ejejei¡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 d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>„   s    ÿÿz@MySQLDialect_mariadbconnector._dbapi_version.<locals>.<listcomp>z(\d+)(?:[-\.]?|$))éc   rC   rC   )Údbapir   ÚtupleÚreÚfindallr=   r&   r   r   r   Ú_dbapi_version€   s   ÿþÿ	z,MySQLDialect_mariadbconnector._dbapi_versionc                    sP   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 r*   )r   r?   r   r   r   Ú	<genexpr>–   s   € z9MySQLDialect_mariadbconnector.__init__.<locals>.<genexpr>r   )r+   Ú__init__Ú
paramstylerD   rH   Úmariadb_cpy_minimum_versionÚNotImplementedErrorÚjoin)r   Úkwargsr4   r   r   rK   Ž   s   

þÿþz&MySQLDialect_mariadbconnector.__init__c                 C   s   t dƒS )NÚmariadb)Ú
__import__)Úclsr   r   r   Úimport_dbapi™   s   z*MySQLDialect_mariadbconnector.import_dbapic                    sB   t ƒ  |||¡r
dS t|| jjƒrt|ƒ ¡ }d|v pd|v S dS )NTznot connectedzisn't validF)r+   Úis_disconnectÚ
isinstancerD   ÚErrorr   Úlower)r   ÚeÚ
connectionr%   Ústr_er4   r   r   rU   �   s   z+MySQLDialect_mariadbconnector.is_disconnectc              	   C   sº   |  ¡ }| |j¡ g d¢}g d¢}|D ]	}t ||t¡ q|D ]	}t ||t¡ q | dd¡}| jd urYzt	| jj
d ƒjj}||jO }W n ttfyT   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_connectionÚcompressr_   r   z.constants.CLIENTF)Útranslate_connect_argsÚupdateÚqueryr	   Úcoerce_kw_typer>   ÚboolÚgetrD   rR   r   Ú	constantsÚCLIENTÚ
FOUND_ROWSÚAttributeErrorÚImportErrorÚsupports_sane_rowcount)r   ÚurlÚoptsÚ
int_paramsÚbool_paramsÚkeyr_   Ú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   ó   dS )Nr;   r   )r   rZ   r   r   r   Ú_detect_charsetÔ   ó   z-MySQLDialect_mariadbconnector._detect_charsetc                 C   r   )N)ÚSERIALIZABLEzREAD UNCOMMITTEDzREAD COMMITTEDzREPEATABLE READÚ
AUTOCOMMITr   )r   Údbapi_connectionr   r   r   Úget_isolation_level_values×   r�   z8MySQLDialect_mariadbconnector.get_isolation_level_valuesc                    s*   |dkr	d|_ d S d|_ tƒ  ||¡ d S )Nrƒ   TF)Ú
autocommitr+   Úset_isolation_level)r   rZ   Úlevelr4   r   r   r‡   à   s   
z1MySQLDialect_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   rZ   r‰   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 :xidr‰   TrŠ   zXA PREPARE :xidrŒ   r‘   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 )Nr“   r‰   TrŠ   zXA ROLLBACK :xidrŒ   ©r   rZ   r‰   Ú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 :xidr‰   TrŠ   )r”   r�   r   rŽ   r�   r�   r•   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_unicoderr   Úsupports_sane_multi_rowcountÚsupports_native_decimalÚdefault_paramstyler   Úexecution_ctx_clsr8   Ústatement_compilerÚsupports_server_side_cursorsr	   Úupdate_copyr   Úcolspecsr
   ÚUuidr   Úmemoized_propertyrH   rK   ÚclassmethodrT   rU   ry   r~   r€   r…   r‡   r’   r”   r˜   r™   r7   r   r   r4   r   r9   b   sB    ÿ

	'	
ÿÿr9   )Ú__doc__rF   Úuuidr   r   Úbaser   r   r   Ú r   r	   r
   rM   Ú_UUID_RETURNr   r   r8   r9   r   r   r   r   r   Ú<module>   s    	 4