§
    eŠtjØ&  ã                  ó‚  — 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 er6d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!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:

.. sourcecode:: text

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

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

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

é    )ÚannotationsN)ÚAny)ÚCallable)Úcast)ÚDict)ÚOptional)ÚTuple)ÚTYPE_CHECKINGé   )ÚMySQLCompiler)ÚMySQLDialect)ÚMySQLExecutionContext)ÚMySQLIdentifierPrepareré   )Úutil)ÚLiteral)Ú
Connection)Ú_DBAPIMultiExecuteParams)ÚConnectArgsType)ÚDBAPIConnection)ÚDBAPICursor)ÚDBAPIModule)ÚExecutionContext)ÚIsolationLevel)ÚURLc                  ó   — e Zd ZdS )ÚMySQLExecutionContext_mysqldbN©Ú__name__Ú
__module__Ú__qualname__© ó    ú_/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sqlalchemy/dialects/mysql/mysqldb.pyr   r   w   ó   € € € € € Ø€Dr#   r   c                  ó   — e Zd ZdS )ÚMySQLCompiler_mysqldbNr   r"   r#   r$   r'   r'   {   r%   r#   r'   c                  ó   ‡ — e Zd ZU dZdZdZdZdZdZdZ	e
ZeZeZded<   d7ˆ fd„Zd8d„Zej        j        d9d„¦   «         Zed:d„¦   «         Zd;ˆ fd„Zd<d„Z	 d=d>d „Z	 d=d?d&„Zd@d(„ZdAd,„ZdBd/„ZdCd2„Z dDd3„Z!dEˆ fd6„Z"ˆ xZ#S )FÚMySQLDialect_mysqldbÚmysqldbTÚformatúTuple[int, ...]Úserver_version_infoÚkwargsr   c                ó¾   •—  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_versionr0   Ú_mysql_dbapi_version)Úselfr.   Ú	__class__s     €r$   r3   zMySQLDialect_mysqldb.__init__Ž   sg   ø€ Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"ð ŒzÐ%­'°$´*¸mÑ*LÔ*LÐ%ð ×%Ò% d¤jÔ&<Ñ=Ô=Ð=àð 	Ô!Ð!Ð!r#   ÚversionÚstrÚreturnc                ó�   — 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   r1   )ÚreÚmatchÚtupleÚgroup)r8   r:   Úms      r$   r6   z)MySQLDialect_mysqldb._parse_dbapi_version–   sN   € ÝŒHÐ0°'Ñ:Ô:ˆØð 	ÝÐKÐK¨¯ª°°A°qÑ)9Ô)9ÐKÑKÔKÑKÔKÐKà�9r#   Úboolc                ó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)r8   rM   s     r$   Úsupports_server_side_cursorsz1MySQLDialect_mysqldb.supports_server_side_cursors�   sN   € ð	Ý Ð!2Ñ3Ô3Ô;ˆGØ$Ô-ˆDŒNØ�4øÝ�^Ð,ð 	ð 	ð 	Ø�5�5ð	øøøs   ‚ $ ¤9¸9r   c                ó    — t          d¦  «        S )NÚMySQLdb)rL   )Úclss    r$   Úimport_dbapiz!MySQLDialect_mysqldb.import_dbapi¦   s   € å˜)Ñ$Ô$Ð$r#   ú!Callable[[DBAPIConnection], None]c                óV   •‡— t          ¦   «                              ¦   «         Šdˆfd„}|S )NÚconnr   r<   ÚNonec                óÒ   •— ‰� ‰| ¦  «         |                       ¦   «         }|�B|                      ¦   «         }|                     d|z  ¦  «         |                     ¦   «          d S d S )NzSET NAMES %s)Úcharacter_set_nameÚcursorÚexecuteÚclose)rY   Úcharset_namer]   Úsuper_s      €r$   Ú
on_connectz3MySQLDialect_mysqldb.on_connect.<locals>.on_connect­   sj   ø€ ØÐ!Ø��t‘”�à×2Ò2Ñ4Ô4ˆLàÐ'ØŸš™œ�Ø—’˜~°Ñ<Ñ=Ô=Ð=Ø—’‘”���ð (Ð'r#   )rY   r   r<   rZ   )r2   rb   )r8   rb   ra   r9   s     @€r$   rb   zMySQLDialect_mysqldb.on_connectª   s?   øø€ Ý‘”×#Ò#Ñ%Ô%ˆð		ð 		ð 		ð 		ð 		ð 		ð Ðr#   Údbapi_connectionr   úLiteral[True]c                ó.   — |                      ¦   «          dS )NT)Úping)r8   rc   s     r$   Údo_pingzMySQLDialect_mysqldb.do_pingº   s   € Ø×ÒÑÔÐØˆtr#   Nr]   r   Ú	statementÚ
parametersr   ÚcontextúOptional[ExecutionContext]rZ   c                ón   — |                      ||¦  «        }|�|t          t          |¦  «        _        d S d S r?   )Úexecutemanyr   r   Ú	_rowcount)r8   r]   rh   ri   rj   Úrowcounts         r$   Údo_executemanyz#MySQLDialect_mysqldb.do_executemany¾   s@   € ð ×%Ò% i°Ñ<Ô<ˆØÐØ=E�DÕ&¨Ñ0Ô0Ô:Ð:Ð:ð Ðr#   Úurlr   Ú_translate_argsúOptional[Dict[str, Any]]r   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 |fS )NÚdbÚuserÚpasswd)ÚdatabaseÚusernameÚpasswordÚcompressÚconnect_timeoutÚread_timeoutÚwrite_timeoutÚclient_flagÚlocal_infileÚuse_unicodeÚcharsetÚssl_caÚssl_keyÚssl_certÚ
ssl_capathÚ
ssl_cipherÚssl_check_hostnameé   Ússlr   r"   )ÚdictÚtranslate_connect_argsÚupdateÚqueryr   Úcoerce_kw_typerJ   r@   r;   ÚgetÚ_found_rows_client_flag)
r8   rq   rr   ÚoptsrŠ   ÚkeysÚkeyÚkw_typer   Ú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�ÑØ�4ˆxˆr#   úOptional[int]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)r4   rL   r   Ú	constantsÚCLIENTÚ
FOUND_ROWSrQ   rP   )r8   ÚCLIENT_FLAGSs     r$   r‘   z,MySQLDialect_mysqldb._found_rows_client_flagþ   so   € ØŒ:Ð!ð/Ý)Ø”JÔ'Ð*=Ñ=ñ ô  äœFð ð $Ô.Ð.øõ #¥KÐ0ð ð ð Ø�t�tðøøøð
 �4s   ‰&6 ¶AÁ
AÚ	exceptionúDBAPIModule.Errorr@   c                ó   — |j         d         S )Nr   )Úargs)r8   rž   s     r$   Ú_extract_error_codez(MySQLDialect_mysqldb._extract_error_code  s   € ØŒ~˜aÔ Ð r#   Ú
connectionr   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)r£   r\   rQ   r   Úwarn)r8   r£   Ú	cset_names      r$   Ú_detect_charsetz$MySQLDialect_mysqldb._detect_charset  sd   € ð	ð
 Ô%Ô8ð ð �9‘;”;Ðøõ ð 	ð 	ð 	ÝŒIð#ñô ð ð �8�8ð	øøøs   ‚ ˜:¹:Ú
dbapi_connúTuple[IsolationLevel, ...]c                ó   — dS )N)ÚSERIALIZABLEzREAD UNCOMMITTEDzREAD COMMITTEDzREPEATABLE READÚ
AUTOCOMMITr"   ©r8   r©   s     r$   Úget_isolation_level_valuesz/MySQLDialect_mysqldb.get_isolation_level_values#  s   € ð
ð 
r#   c                ó*   — |                      ¦   «         S r?   )Úget_autocommitr®   s     r$   Údetect_autocommit_settingz.MySQLDialect_mysqldb.detect_autocommit_setting.  s   € Ø×(Ò(Ñ*Ô*Ð*r#   Úlevelr   c                ó°   •— |dk    r|                      d¦  «         d S |                      d¦  «         t          ¦   «                              ||¦  «         d S )Nr­   TF)Ú
autocommitr2   Úset_isolation_level)r8   rc   r³   r9   s      €r$   r¶   z(MySQLDialect_mysqldb.set_isolation_level1  s_   ø€ ð �LÒ Ð Ø×'Ò'¨Ñ-Ô-Ð-Ð-Ð-à×'Ò'¨Ñ.Ô.Ð.Ý‰GŒG×'Ò'Ð(8¸%Ñ@Ô@Ð@Ð@Ð@r#   )r.   r   )r:   r;   r<   r,   )r<   rJ   )r<   r   )r<   rW   )rc   r   r<   rd   r?   )
r]   r   rh   r;   ri   r   rj   rk   r<   rZ   )rq   r   rr   rs   r<   r   )r<   r˜   )rž   rŸ   r<   r@   )r£   r   r<   r;   )r©   r   r<   rª   )r©   r   r<   rJ   )rc   r   r³   r   r<   rZ   )$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   ÚpreparerÚ__annotations__r3   r6   r   ÚlanghelpersÚmemoized_propertyrR   ÚclassmethodrV   rb   rg   rp   r—   r‘   r¢   r¨   r¯   r²   r¶   Ú__classcell__)r9   s   @r$   r)   r)      sâ  ø€ € € € € € Ø€FØ#ÐØ"&ÐØ!ÐØ#'Ð à"Ðà!ÐØ5ÐØ.ÐØ&€HØ(Ð(Ð(Ñ(ð
ð 
ð 
ð 
ð 
ð 
ðð ð ð ð 
ÔÔ'ðð ð ñ (Ô'ðð ð%ð %ð %ñ „[ð%ðð ð ð ð ð ð ð ð ð ð /3ð	Fð 	Fð 	Fð 	Fð 	Fð EIð3ð 3ð 3ð 3ð 3ðjð ð ð ð!ð !ð !ð !ðð ð ð ð*	
ð 	
ð 	
ð 	
ð+ð +ð +ð +ðAð Að Að Að Að Að Að Að Að Ar#   r)   )%Ú__doc__Ú
__future__r   rE   Útypingr   r   r   r   r   r	   r
   Úbaser   r   r   r   Ú r   Úutil.typingr   Úengine.baser   Úengine.interfacesr   r   r   r   r   r   r   Ú
engine.urlr   r   r'   r)   Údialectr"   r#   r$   ú<module>rÐ      s^  ððNð Nð` #Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø )Ð )Ð )Ð )Ð )Ð )Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "àð 
"à)Ð)Ð)Ð)Ð)Ð)Ø=Ð=Ð=Ð=Ð=Ð=Ø4Ð4Ð4Ð4Ð4Ð4Ø4Ð4Ð4Ð4Ð4Ð4Ø0Ð0Ð0Ð0Ð0Ð0Ø0Ð0Ð0Ð0Ð0Ð0Ø5Ð5Ð5Ð5Ð5Ð5Ø3Ð3Ð3Ð3Ð3Ð3Ø!Ð!Ð!Ð!Ð!Ð!ð	ð 	ð 	ð 	ð 	Ð$9ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	˜Mñ 	ô 	ð 	ðyAð yAð yAð yAð yA˜<ñ yAô yAð yAðx €€€r#   