§
    WøÁi%  ã                   ó¾   — 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
  G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        ZeZdS )a‘  

.. dialect:: mysql+mysqldb
    :name: mysqlclient (maintained fork of MySQL-Python)
    :dbapi: mysqldb
    :connectstring: mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>
    :url: https://pypi.org/project/mysqlclient/

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

The mysqlclient DBAPI is a maintained fork of the
`MySQL-Python <https://sourceforge.net/projects/mysql-python>`_ DBAPI
that is no longer maintained.  `mysqlclient`_ supports Python 2 and Python 3
and is very stable.

.. _mysqlclient: https://github.com/PyMySQL/mysqlclient-python

.. _mysqldb_unicode:

Unicode
-------

Please see :ref:`mysql_unicode` for current recommendations on unicode
handling.

.. _mysqldb_ssl:

SSL Connections
----------------

The mysqlclient and PyMySQL DBAPIs accept an additional dictionary under the
key "ssl", which may be specified using the
:paramref:`_sa.create_engine.connect_args` dictionary::

    engine = create_engine(
        "mysql+mysqldb://scott:tiger@192.168.0.134/test",
        connect_args={
            "ssl": {
                "ca": "/home/gord/client-ssl/ca.pem",
                "cert": "/home/gord/client-ssl/client-cert.pem",
                "key": "/home/gord/client-ssl/client-key.pem"
            }
        }
    )

For convenience, the following keys may also be specified inline within the URL
where they will be interpreted into the "ssl" dictionary automatically:
"ssl_ca", "ssl_cert", "ssl_key", "ssl_capath", "ssl_cipher",
"ssl_check_hostname". An example is as follows::

    connection_uri = (
        "mysql+mysqldb://scott:tiger@192.168.0.134/test"
        "?ssl_ca=/home/gord/client-ssl/ca.pem"
        "&ssl_cert=/home/gord/client-ssl/client-cert.pem"
        "&ssl_key=/home/gord/client-ssl/client-key.pem"
    )

.. seealso::

    :ref:`pymysql_ssl` in the PyMySQL dialect


Using MySQLdb with Google Cloud SQL
-----------------------------------

Google Cloud SQL now recommends use of the MySQLdb dialect.  Connect
using a URL like the following::

    mysql+mysqldb://root@/<dbname>?unix_socket=/cloudsql/<projectid>:<instancename>

Server Side Cursors
-------------------

The mysqldb dialect supports server-side cursors. See :ref:`mysql_ss_cursors`.

é    Né   )ÚMySQLCompiler)ÚMySQLDialect)ÚMySQLExecutionContext)ÚMySQLIdentifierPreparer)ÚTEXTé   )Úsql)Úutilc                   ó   — e Zd ZdS )ÚMySQLExecutionContext_mysqldbN©Ú__name__Ú
__module__Ú__qualname__© ó    úk/var/www/html/jarvis.com/web/backend/venv/lib/python3.11/site-packages/sqlalchemy/dialects/mysql/mysqldb.pyr   r   c   ó   € € € € € Ø€Dr   r   c                   ó   — e Zd ZdS )ÚMySQLCompiler_mysqldbNr   r   r   r   r   r   g   r   r   r   c                   óØ   ‡ — e Zd ZdZdZdZdZdZdZdZ	e
ZeZeZˆ fd„Zd„ Zej        j        d„ ¦   «         Zed„ ¦   «         Zˆ fd„Zd	„ Zdd„Zˆ fd„Zdd„Zd„ Zd„ Zd„ Zd„ Z ˆ fd„Z!ˆ xZ"S )ÚMySQLDialect_mysqldbÚmysqldbTÚformatc                 ó¾   •—  t          ¦   «         j        di |¤Ž | j        �4t          | j        d¦  «        r|                      | j        j        ¦  «        nd| _        d S )NÚ__version__©r   r   r   r   )ÚsuperÚ__init__ÚdbapiÚhasattrÚ_parse_dbapi_versionr   Ú_mysql_dbapi_version)ÚselfÚkwargsÚ	__class__s     €r   r    zMySQLDialect_mysqldb.__init__y   sg   ø€ Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"ð ŒzÐ%­'°$´*¸mÑ*LÔ*LÐ%ð ×%Ò% d¤jÔ&<Ñ=Ô=Ð=àð 	Ô!Ð!Ð!r   c                 ó�   — t          j        d|¦  «        }|r.t          d„ |                     ddd¦  «        D ¦   «         ¦  «        S dS )Nz(\d+)\.(\d+)(?:\.(\d+))?c              3   ó8   K  — | ]}|®t          |¦  «        V — Œd S ©N)Úint)Ú.0Úxs     r   ú	<genexpr>z<MySQLDialect_mysqldb._parse_dbapi_version.<locals>.<genexpr>„   s(   è è € ÐKÐK A¸Q¸]�˜Q™œ¸]¸]¸]¸]ÐKÐKr   r   é   r	   r   )ÚreÚmatchÚtupleÚgroup)r%   ÚversionÚms      r   r#   z)MySQLDialect_mysqldb._parse_dbapi_version�   sN   € ÝŒHÐ0°'Ñ:Ô:ˆØð 	ÝÐKÐK¨¯ª°°A°qÑ)9Ô)9ÐKÑKÔKÑKÔKÐKà�9r   c                 óx   — 	 t          d¦  «        j        }|j        | _        dS # t          t
          f$ r Y dS w xY w)NzMySQLdb.cursorsTF)Ú
__import__ÚcursorsÚSSCursorÚ	_sscursorÚImportErrorÚAttributeError)r%   r8   s     r   Úsupports_server_side_cursorsz1MySQLDialect_mysqldb.supports_server_side_cursorsˆ   sN   € ð	Ý Ð!2Ñ3Ô3Ô;ˆGØ$Ô-ˆDŒNØ�4øÝ�^Ð,ð 	ð 	ð 	Ø�5�5ð	øøøs   ‚ $ ¤9¸9c                 ó    — t          d¦  «        S )NÚMySQLdb)r7   )Úclss    r   Úimport_dbapiz!MySQLDialect_mysqldb.import_dbapi‘   s   € å˜)Ñ$Ô$Ð$r   c                 óT   •‡— t          ¦   «                              ¦   «         Šˆfd„}|S )Nc                 óÒ   •— ‰� ‰| ¦  «         |                       ¦   «         }|�B|                      ¦   «         }|                     d|z  ¦  «         |                     ¦   «          d S d S )NzSET NAMES %s)Úcharacter_set_nameÚcursorÚexecuteÚclose)ÚconnÚcharset_namerE   Úsuper_s      €r   Ú
on_connectz3MySQLDialect_mysqldb.on_connect.<locals>.on_connect˜   sj   ø€ ØÐ!Ø��t‘”�à×2Ò2Ñ4Ô4ˆLàÐ'ØŸš™œ�Ø—’˜~°Ñ<Ñ=Ô=Ð=Ø—’‘”���ð (Ð'r   )r   rK   )r%   rK   rJ   r'   s     @€r   rK   zMySQLDialect_mysqldb.on_connect•   s:   øø€ Ý‘”×#Ò#Ñ%Ô%ˆð		ð 		ð 		ð 		ð 		ð Ðr   c                 ó.   — |                      ¦   «          dS )NT)Úping©r%   Údbapi_connections     r   Údo_pingzMySQLDialect_mysqldb.do_ping¥   s   € Ø×ÒÑÔÐØˆtr   Nc                 óH   — |                      ||¦  «        }|�	||_        d S d S r*   )ÚexecutemanyÚ	_rowcount)r%   rE   Ú	statementÚ
parametersÚcontextÚrowcounts         r   Údo_executemanyz#MySQLDialect_mysqldb.do_executemany©   s3   € Ø×%Ò% i°Ñ<Ô<ˆØÐØ (ˆGÔÐÐð Ðr   c                 óº  •— |                      d| j                             d¦  «        ›d| j                             d¦  «        ›d�¦  «                             ¦   «         }| j        dk    o|}|rJt          j        t          j        t          j        d¦  «        t          d¬	¦  «        ¦  «        d
¦  «        g}ng }t          ¦   «                              ||¦  «        S )Nzshow collation where ÚCharsetz = 'utf8mb4' and Ú	Collationz = 'utf8mb4_bin')é   z'test collated returns'Úutf8mb4)ÚcharsetÚutf8mb4_bin)Úexec_driver_sqlÚidentifier_preparerÚquoteÚscalarÚserver_version_infor
   ÚcollateÚcastÚliteral_columnr   r   Ú_check_unicode_returns)r%   Ú
connectionÚ	collationÚhas_utf8mb4_binÚadditional_testsr'   s        €r   rh   z+MySQLDialect_mysqldb._check_unicode_returns®   sð   ø€ ð
 ×.Ò.Ð.ð Ô(×.Ò.¨yÑ9Ô9Ð9Ð9ØÔ(×.Ò.¨{Ñ;Ô;Ð;Ð;ðñ
ô 
÷ Š&‰(Œ(ð 	ð Ô2°TÒ9ÐG¸iˆØð 	"å”Ý”HÝÔ*Ð+DÑEÔEÝ YÐ/Ñ/Ô/ñô ð "ñô ð ÐÐð  "ÐÝ‰wŒw×-Ò-¨jÐ:JÑKÔKÐKr   c                 ó’  — |€t          ddd¬¦  «        } |j        di |¤Ž}|                     |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          ¦  «         i }dt          fdt          fdt          fdt          fdt          fdt          fg}|D ]=\  }}||v r4||         ||dd …         <   t	          j        ||dd …         |¦  «         ||= Œ>|r||d<   | 	                    d	d¦  «        }|  
                    ¦   «         }	|	�
||	z  }||d	<   g |gS )NÚdbÚuserÚpasswd)ÚdatabaseÚusernameÚpasswordÚcompressÚconnect_timeoutÚread_timeoutÚwrite_timeoutÚclient_flagÚlocal_infileÚuse_unicoder^   Ússl_caÚssl_keyÚssl_certÚ
ssl_capathÚ
ssl_cipherÚssl_check_hostnameé   Ússlr   r   )ÚdictÚtranslate_connect_argsÚupdateÚqueryr   Úcoerce_kw_typeÚboolr+   ÚstrÚgetÚ_found_rows_client_flag)
r%   ÚurlÚ_translate_argsÚoptsr‚   ÚkeysÚkeyÚkw_typerx   Úclient_flag_found_rowss
             r   Úcreate_connect_argsz(MySQLDialect_mysqldb.create_connect_argsÉ   sî  € ØÐ"Ý"Ø¨¸ðñ ô ˆOð *ˆsÔ)Ð<Ð<¨OÐ<Ð<ˆØ�Š�C”IÑÔÐåÔ˜D *­dÑ3Ô3Ð3ÝÔ˜DÐ"3µSÑ9Ô9Ð9ÝÔ˜D .µ#Ñ6Ô6Ð6ÝÔ˜D /µ3Ñ7Ô7Ð7ÝÔ˜D -µÑ5Ô5Ð5ÝÔ˜D .µ$Ñ7Ô7Ð7õ 	Ô˜D -µÑ6Ô6Ð6ÝÔ˜D )­SÑ1Ô1Ð1ð
 ˆà•sˆOØ�ÐØ�ÐØ�3ÐØ�3ÐØ!¥4Ð(ð
ˆð !ð 	ð 	‰LˆC�Ø�dˆ{ˆ{Ø# Cœy��C˜˜˜”G‘ÝÔ# C¨¨Q¨R¨R¬°'Ñ:Ô:Ð:Ø˜�IøØð 	ØˆD�‰Kð —h’h˜}¨aÑ0Ô0ˆà!%×!=Ò!=Ñ!?Ô!?ÐØ!Ð-ØÐ1Ñ1ˆKØ"-ˆD�ÑØ�DˆzÐr   c                 ó    — | j         �F	 t          | j         j        dz   ¦  «        j        j        }|j        S # t          t          f$ r Y d S w xY wd S )Nz.constants.CLIENT)r!   r7   r   Ú	constantsÚCLIENTÚ
FOUND_ROWSr<   r;   )r%   ÚCLIENT_FLAGSs     r   r‹   z,MySQLDialect_mysqldb._found_rows_client_flagü   so   € ØŒ:Ð!ð/Ý)Ø”JÔ'Ð*=Ñ=ñ ô  äœFð ð $Ô.Ð.øõ #¥KÐ0ð ð ð Ø�t�tðøøøð
 �4s   ‰&6 ¶AÁ
Ac                 ó   — |j         d         S )Nr   )Úargs)r%   Ú	exceptions     r   Ú_extract_error_codez(MySQLDialect_mysqldb._extract_error_code	  s   € ØŒ~˜aÔ Ð r   c                 óz   — 	 |j         j        } |¦   «         S # t          $ r t          j        d¦  «         Y dS w xY w)z:Sniff out the character set in use for connection results.z�No 'character_set_name' can be detected with this MySQL-Python version; please upgrade to a recent version of MySQL-Python.  Assuming latin1.Úlatin1)ri   rD   r<   r   Úwarn)r%   ri   Ú	cset_names      r   Ú_detect_charsetz$MySQLDialect_mysqldb._detect_charset  sa   € ð	ð #Ô-Ô@ˆIð �9‘;”;Ðøõ ð 	ð 	ð 	ÝŒIð#ñô ð ð �8�8ð	øøøs   ‚ ˜:¹:c                 ó   — dS )N)ÚSERIALIZABLEzREAD UNCOMMITTEDzREAD COMMITTEDzREPEATABLE READÚ
AUTOCOMMITr   rN   s     r   Úget_isolation_level_valuesz/MySQLDialect_mysqldb.get_isolation_level_values  s   € ð
ð 
r   c                 ó°   •— |dk    r|                      d¦  «         d S |                      d¦  «         t          ¦   «                              ||¦  «         d S )Nr¤   TF)Ú
autocommitr   Úset_isolation_level)r%   rO   Úlevelr'   s      €r   r¨   z(MySQLDialect_mysqldb.set_isolation_level'  s]   ø€ Ø�LÒ Ð Ø×'Ò'¨Ñ-Ô-Ð-Ð-Ð-à×'Ò'¨Ñ.Ô.Ð.Ý‰GŒG×'Ò'Ð(8¸%Ñ@Ô@Ð@Ð@Ð@r   r*   )#r   r   r   ÚdriverÚsupports_statement_cacheÚsupports_unicode_statementsÚsupports_sane_rowcountÚsupports_sane_multi_rowcountÚsupports_native_decimalÚdefault_paramstyler   Úexecution_ctx_clsr   Ústatement_compilerr   Úpreparerr    r#   r   ÚlanghelpersÚmemoized_propertyr=   ÚclassmethodrA   rK   rP   rX   rh   r“   r‹   rœ   r¡   r¥   r¨   Ú__classcell__)r'   s   @r   r   r   k   s‹  ø€ € € € € Ø€FØ#ÐØ"&ÐØ!ÐØ#'Ð à"Ðà!ÐØ5ÐØ.ÐØ&€Hð
ð 
ð 
ð 
ð 
ðð ð ð 
ÔÔ'ðð ñ (Ô'ðð ð%ð %ñ „[ð%ðð ð ð ð ð ð ð ð)ð )ð )ð )ð
Lð Lð Lð Lð Lð61ð 1ð 1ð 1ðfð ð ð!ð !ð !ðð ð ð$
ð 
ð 
ðAð Að Að Að Að Að Að Að Ar   r   )Ú__doc__r0   Úbaser   r   r   r   r   Ú r
   r   r   r   r   Údialectr   r   r   ú<module>r¼      s6  ððLð Lð\ 
€	€	€	à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø )Ð )Ð )Ð )Ð )Ð )Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ð	ð 	ð 	ð 	ð 	Ð$9ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	˜Mñ 	ô 	ð 	ðAAð AAð AAð AAð AA˜<ñ AAô AAð AAðH €€€r   