Ë
    ðmxiq'  ã                  ó  — d Z ddlm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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
rBd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& ddl'm(Z(  G d „ d!e«      Z) G d"„ d#e«      Z* G d$„ d%«      Z+ G d&„ d'e+e«      Z, G d(„ d)e+e«      Z- G d*„ d+e«      Z. G d,„ d-e«      Z/ G d.„ d/ee/«      Z0e/Z1e0Z2y)0a,  
.. 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/

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

MySQL Connector/Python is supported as of SQLAlchemy 2.0.39 to the
degree which the driver is functional.   There are still ongoing issues
with features such as server side cursors which remain disabled until
upstream issues are repaired.

.. warning:: The MySQL Connector/Python driver published by Oracle is subject
   to frequent, major regressions of essential functionality such as being able
   to correctly persist simple binary strings which indicate it is not well
   tested.  The SQLAlchemy project is not able to maintain this dialect fully as
   regressions in the driver prevent it from being included in continuous
   integration.

.. versionchanged:: 2.0.39

    The MySQL Connector/Python dialect has been updated to support the
    latest version of this DBAPI.   Previously, MySQL Connector/Python
    was not fully supported.  However, support remains limited due to ongoing
    regressions introduced in this driver.

Connecting to MariaDB with MySQL Connector/Python
--------------------------------------------------

MySQL Connector/Python may attempt to pass an incompatible collation to the
database when connecting to MariaDB.  Experimentation has shown that using
``?charset=utf8mb4&collation=utfmb4_general_ci`` or similar MariaDB-compatible
charset/collation will allow connectivity.


é    )ÚannotationsN)ÚAny)Úcast)ÚOptional)ÚSequence)ÚTuple)ÚTYPE_CHECKING)ÚUnioné   )ÚMariaDBIdentifierPreparer)ÚMySQLCompiler)ÚMySQLDialect)ÚMySQLExecutionContext)ÚMySQLIdentifierPreparer)ÚMariaDBDialect)ÚBITé   )Úutil)Ú
Connection)ÚCursorResult)ÚConnectArgsType)ÚDBAPIConnection)ÚDBAPICursor)ÚDBAPIModule)ÚIsolationLevel)ÚPoolProxiedConnection)ÚRow)ÚURL)ÚBinaryExpressionc                  ó   — e Zd Zdd„Zdd„Zy)Ú$MySQLExecutionContext_mysqlconnectorc                ó:   — | j                   j                  d¬«      S )NF©Úbuffered©Ú_dbapi_connectionÚcursor©Úselfs    ú_/home/htdocs/ttos/venv/lib/python3.12/site-packages/sqlalchemy/dialects/mysql/mysqlconnector.pyÚcreate_server_side_cursorz>MySQLExecutionContext_mysqlconnector.create_server_side_cursorT   s   € Ø×%Ñ%×,Ñ,°eÐ,Ó<Ð<ó    c                ó:   — | j                   j                  d¬«      S )NTr#   r%   r(   s    r*   Úcreate_default_cursorz:MySQLExecutionContext_mysqlconnector.create_default_cursorW   s   € Ø×%Ñ%×,Ñ,°dÐ,Ó;Ð;r,   N)Úreturnr   )Ú__name__Ú
__module__Ú__qualname__r+   r.   © r,   r*   r!   r!   S   s   „ ó=ô<r,   r!   c                  ó$   — e Zd Z	 	 	 	 	 	 	 	 dd„Zy)ÚMySQLCompiler_mysqlconnectorc                ó~   —  | j                   |j                  fi |¤Ždz    | j                   |j                  fi |¤Žz   S )Nz % )ÚprocessÚleftÚright)r)   ÚbinaryÚoperatorÚkws       r*   Úvisit_mod_binaryz-MySQLCompiler_mysqlconnector.visit_mod_binary\   sD   € ð ˆD�L‰L˜Ÿ™Ñ+¨Ñ+Øñàˆd�l‰l˜6Ÿ<™<Ñ.¨2Ñ.ñ/ð	
r,   N)r:   zBinaryExpression[Any]r;   r   r<   r   r/   Ústr)r0   r1   r2   r=   r3   r,   r*   r5   r5   [   s'   „ ð
Ø+ð
Ø7:ð
ØBEð
à	ô
r,   r5   c                  óL   — e Zd Zedd„«       Zej
                  dd„«       Zdd„Zy)Ú'IdentifierPreparerCommon_mysqlconnectorc                 ó   — y)NFr3   r(   s    r*   Ú_double_percentsz8IdentifierPreparerCommon_mysqlconnector._double_percentsg   s   € àr,   c                 ó   — y ©Nr3   ©r)   Úvalues     r*   rB   z8IdentifierPreparerCommon_mysqlconnector._double_percentsk   s   € àr,   c                óR   — |j                  | j                  | j                  «      }|S rD   )ÚreplaceÚescape_quoteÚescape_to_quoterE   s     r*   Ú_escape_identifierz:IdentifierPreparerCommon_mysqlconnector._escape_identifiero   s)   € Ø—‘Ø×ÑØ× Ñ ó
ˆð ˆr,   N)r/   Úbool)rF   r   r/   ÚNone)rF   r>   r/   r>   )r0   r1   r2   ÚpropertyrB   ÚsetterrK   r3   r,   r*   r@   r@   f   s3   „ Øòó ðð ×Ñòó ðôr,   r@   c                  ó   — e Zd Zy)Ú&MySQLIdentifierPreparer_mysqlconnectorN©r0   r1   r2   r3   r,   r*   rQ   rQ   w   ó   „ ð 	r,   rQ   c                  ó   — e Zd Zy)Ú(MariaDBIdentifierPreparer_mysqlconnectorNrR   r3   r,   r*   rU   rU   }   rS   r,   rU   c                  ó   — e Zd Zdd„Zy)Ú_myconnpyBITc                 ó   — y)z0MySQL-connector already converts mysql bits, so.Nr3   )r)   ÚdialectÚcoltypes      r*   Úresult_processorz_myconnpyBIT.result_processor„   s   € ð r,   N)rY   r   rZ   r   r/   rM   )r0   r1   r2   r[   r3   r,   r*   rW   rW   ƒ   s   „ ôr,   rW   c                  óV  ‡ — e Zd ZU dZdZdZdZdZdZdZ	dZ
eZeZeZded<    ej&                  ej*                  eei«      Zedd„«       Zdd„Zdd	„Zej8                  dd
„«       Zdd„Zdd„Z	 	 	 	 	 	 	 	 dd„Z 	 d	 	 	 	 	 dd„Z!	 d	 	 	 	 	 dd„Z"	 	 	 	 dd„Z#dd„Z$	 	 	 	 	 	 dˆ fd„Z%ˆ xZ&S ) ÚMySQLDialect_mysqlconnectorÚmysqlconnectorTFÚformatztype[MySQLIdentifierPreparer]Úpreparerc                ó@   — t        dt        d«      j                  «      S )Nr   zmysql.connector)r   Ú
__import__Ú	connector)Úclss    r*   Úimport_dbapiz(MySQLDialect_mysqlconnector.import_dbapi£   s   € ä�M¤:Ð.?Ó#@×#JÑ#JÓKÐKr,   c                ó&   — |j                  d«       y)NFT)Úping)r)   Údbapi_connections     r*   Údo_pingz#MySQLDialect_mysqlconnector.do_ping§   s   € Ø×Ñ˜eÔ$Ør,   c                óÖ  — |j                  d¬«      }|j                  |j                  «       t        j                  |dt
        «       t        j                  |dt
        «       t        j                  |dt
        «       t        j                  |dt        «       t        j                  |dt
        «       t        j                  |dt        «       t        j                  |d	t        «       t        j                  |d
t
        «       t        j                  |dt
        «       t        j                  |dt
        «       t        j                  |dt
        «       t        j                  |dt        «       t        j                  |dt
        «       t        j                  |dt
        «       t        j                  |dt
        «       t        j                  |dt
        «       t        j                  |dt
        «       d|d<   | j                  �K	 ddlm	} |j                  }|j                  d|j                  «       «      }||j                  z  }||d<   g |fS g |fS # t        $ r Y g |fS w xY w)NÚuser)ÚusernameÚallow_local_infileÚ
autocommitr$   Ú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   )Ú	constantsÚclient_flags)Útranslate_connect_argsÚupdateÚqueryr   Úcoerce_kw_typerL   ÚintÚdbapiÚmysql.connectorr}   Ú
ClientFlagÚgetÚget_defaultÚ
FOUND_ROWSÚ	Exception)r)   ÚurlÚoptsr}   r†   r~   s         r*   Úcreate_connect_argsz/MySQLDialect_mysqlconnector.create_connect_args«   sñ  € Ø×)Ñ)°6Ð)Ó:ˆà�‰�C—I‘IÔä×Ñ˜DÐ"6¼Ô=Ü×Ñ˜D ,´Ô5Ü×Ñ˜D *¬dÔ3Ü×Ñ˜D -´Ô5Ü×Ñ˜D *¬dÔ3Ü×Ñ˜DÐ"6¼Ô<Ü×Ñ˜DÐ"3´SÔ9Ü×Ñ˜DÐ"3´TÔ:Ü×Ñ˜D ,´Ô5Ü×Ñ˜D .´$Ô7Ü×Ñ˜DÐ"6¼Ô=Ü×Ñ˜D +¬sÔ3Ü×Ñ˜DÐ"5´tÔ<Ü×Ñ˜D %¬Ô.Ü×Ñ˜DÐ"3´TÔ:Ü×Ñ˜D *¬dÔ3Ü×Ñ˜D -´Ô6ð  ˆˆZÑð �:‰:Ð!ðÝ5à&×1Ñ1�
à#Ÿx™xØ" J×$:Ñ$:Ó$<ó �ð  
× 5Ñ 5Ñ5�Ø'3��^Ñ$ð �4ˆxˆˆr�4ˆxˆøô ò Øà�4ˆxˆðús   ÈAI É	I(É'I(c                óæ   — | j                   ret        | j                   d«      rOt        j                  d| j                   j                  «      }|r#t        d„ |j                  ddd«      D «       «      S y )NÚ__version__z(\d+)\.(\d+)(?:\.(\d+))?c              3  ó8   K  — | ]  }|€Œt        |«      –— Œ y ­wrD   )rƒ   )Ú.0Úxs     r*   ú	<genexpr>zKMySQLDialect_mysqlconnector._mysqlconnector_version_info.<locals>.<genexpr>á   s   è ø€ ÒO¨ÀÁœS ŸVÑOùs   ‚Šr   é   r   )r„   ÚhasattrÚreÚmatchr�   ÚtupleÚgroup)r)   Úms     r*   Ú_mysqlconnector_version_infoz8MySQLDialect_mysqlconnector._mysqlconnector_version_infoÜ   sU   € à�:Š:œ' $§*¡*¨mÔ<Ü—‘Ð4°d·j±j×6LÑ6LÓMˆAÙÜÑO¨Q¯W©W°Q¸¸1Ó-=ÔOÓOÐOØr,   c                ó.   — |j                   j                  S rD   )Ú
connectionÚcharset)r)   r�   s     r*   Ú_detect_charsetz+MySQLDialect_mysqlconnector._detect_charsetä   s   € Ø×$Ñ$×,Ñ,Ð,r,   c                ó   — |j                   S rD   )Úerrno)r)   Ú	exceptions     r*   Ú_extract_error_codez/MySQLDialect_mysqlconnector._extract_error_codeç   s   € Ø�‰Ðr,   c                óú   — d}| j                   j                  | j                   j                  | j                   j                  f}t	        ||«      r,|j
                  |v xs dt        |«      v xs dt        |«      v S y)N)iÖ  iÝ  iÞ  iý  i  i   zMySQL Connection not available.z$Connection to MySQL is not availableF)Úloaded_dbapiÚOperationalErrorÚInterfaceErrorÚProgrammingErrorÚ
isinstancer¡   r>   )r)   Úer�   r'   ÚerrnosÚ
exceptionss         r*   Úis_disconnectz)MySQLDialect_mysqlconnector.is_disconnectê   sƒ   € ð 6ˆà×Ñ×.Ñ.Ø×Ñ×,Ñ,Ø×Ñ×.Ñ.ð
ˆ
ô
 �a˜Ô$à—‘˜6Ð!ò DØ4¼¸A»Ð>òDà9¼SÀ»VÐCðð r,   c                ó"   — |j                  «       S rD   )Úfetchall©r)   Úrprž   s      r*   Ú_compat_fetchallz,MySQLDialect_mysqlconnector._compat_fetchallÿ   ó   € ð
 �{‰{‹}Ðr,   c                ó"   — |j                  «       S rD   )Úfetchoner°   s      r*   Ú_compat_fetchonez,MySQLDialect_mysqlconnector._compat_fetchone  r³   r,   c                 ó   — y)N)ÚSERIALIZABLEzREAD UNCOMMITTEDzREAD COMMITTEDzREPEATABLE READÚ
AUTOCOMMITr3   ©r)   Ú
dbapi_conns     r*   Úget_isolation_level_valuesz6MySQLDialect_mysqlconnector.get_isolation_level_values  s   € ð
r,   c                ó,   — t        |j                  «      S rD   )rL   rn   rº   s     r*   Údetect_autocommit_settingz5MySQLDialect_mysqlconnector.detect_autocommit_setting  s   € Ü�J×)Ñ)Ó*Ð*r,   c                óN   •— |dk(  rd|_         y d|_         t        ‰| �	  ||«       y )Nr¹   TF)rn   ÚsuperÚset_isolation_level)r)   rh   ÚlevelÚ	__class__s      €r*   rÁ   z/MySQLDialect_mysqlconnector.set_isolation_level  s/   ø€ ð �LÒ Ø*.ÐÕ'à*/ÐÔ'Ü‰GÑ'Ð(8¸%Õ@r,   )r/   r   )rh   r   r/   rL   )r‹   r   r/   r   )r/   zOptional[Tuple[int, ...]])r�   r   r/   r>   )r¢   ÚBaseExceptionr/   rƒ   )rª   rŠ   r�   z7Optional[Union[PoolProxiedConnection, DBAPIConnection]]r'   zOptional[DBAPICursor]r/   rL   rD   )r±   úCursorResult[Tuple[Any, ...]]rž   úOptional[str]r/   zSequence[Row[Tuple[Any, ...]]])r±   rÅ   rž   rÆ   r/   zOptional[Row[Tuple[Any, ...]]])r»   r   r/   zSequence[IsolationLevel])r»   r   r/   rL   )rh   r   rÂ   r   r/   rM   )'r0   r1   r2   ÚdriverÚsupports_statement_cacheÚsupports_sane_rowcountÚsupports_sane_multi_rowcountÚsupports_native_decimalÚsupports_native_bitÚsupports_server_side_cursorsÚdefault_paramstyler5   Ústatement_compilerr!   Úexecution_ctx_clsrQ   r`   Ú__annotations__r   Úupdate_copyr   Úcolspecsr   rW   Úclassmethodre   ri   r�   Úmemoized_propertyr›   rŸ   r£   r­   r²   r¶   r¼   r¾   rÁ   Ú__classcell__)rÃ   s   @r*   r]   r]   Š   so  ø… Ø€FØ#Ðà!ÐØ#'Ð à"ÐàÐð $)Ð à!ÐØ5Ðà<Ðð 	/ð Ð+ó ð  ˆt×Ñ × 5Ñ 5¸¸\Ð7JÓK€HàòLó ðLóó/ðb 
×Ñòó ðó-óðàðð Lðð &ð	ð
 
óð0 "&ðà)ðð ðð 
(ó	ð "&ðà)ðð ðð 
(ó	ð	
Ø)ð	
à	!ó	
ó+ðAØ /ðAØ8FðAà	÷Añ Ar,   r]   c                  ó   — e Zd ZdZdZeZy)ÚMariaDBDialect_mysqlconnectorTFN)r0   r1   r2   rÈ   Ú_allows_uuid_bindsrU   r`   r3   r,   r*   rØ   rØ   %  s   „ ð  $ÐØÐØ7�Hr,   rØ   )3Ú__doc__Ú
__future__r   r–   Útypingr   r   r   r   r   r	   r
   Úbaser   r   r   r   r   Úmariadbr   Útypesr   Ú r   Úengine.baser   Úengine.cursorr   Úengine.interfacesr   r   r   r   r   r   Ú
engine.rowr   Ú
engine.urlr   Úsql.elementsr   r!   r5   r@   rQ   rU   rW   r]   rØ   rY   Úmariadb_dialectr3   r,   r*   ú<module>rè      sà   ðñ&õN #ã 	Ý Ý Ý Ý Ý Ý  Ý å +Ý Ý Ý 'Ý )Ý #Ý Ý áå)Ý-Ý4Ý4Ý0Ý0Ý3Ý:Ý!Ý!Ý0ô<Ð+@ô <ô
 =ô 
÷ñ ô"	Ø+Ð-Dô	ô	Ø+Ð-Fô	ô�3ô ôXA ,ô XAôv8ØÐ/ô8ð &€Ø/�r,   