o
    "7h[3                     @   s   d Z ddlZddlmZmZ ddlmZmZmZm	Z	m
Z
mZmZmZmZmZ ddddd	d
ZedZdd ZG dd dejZdS )a  
This module implements connections for MySQLdb. Presently there is
only one class: Connection. Others are unlikely. However, you might
want to make your own subclasses. In most cases, you will probably
override Connection.default_cursor with a non-standard Cursor class.
    N   )cursors_mysql)
WarningErrorInterfaceError	DataErrorDatabaseErrorOperationalErrorIntegrityErrorInternalErrorNotSupportedErrorProgrammingErrorutf8cp1252koi8_rkoi8_u)utf8mb4utf8mb3latin1koi8rkoi8uz^(\d+)c                 C   s    t | }|rt|dS dS )zReturns the leading numeric part of a string.

    >>> numeric_part("20-alpha")
    20
    >>> numeric_part("foo")
    >>> numeric_part("16b")
    16
    r   N)re_numeric_partmatchintgroup)sm r   h/var/www/epreuve.sigeris.cm/public_html/epreuve/venv/lib/python3.10/site-packages/MySQLdb/connections.pynumeric_part#   s   

r    c                       s   e Zd ZdZejZ fddZ		d!ddZd	d
 Z	dd Z
dd Zd"ddZdd Zdd Zdd Zdd Zdd Zd" fdd	Zdd Zdd  ZeZeZeZeZeZeZeZeZeZeZ  ZS )#
Connectionz MySQL Database Connection Objectc                    sJ  ddl m}m} ddlm}m} | }d|v r|d|d< d|v r*|d|d< d|v r3|d }n|}i }	| D ]\}
}t	|
t
rRt	|trR|d	d	 |	|
< q;||	|
< q;|	|d< |d
| j}|dd}|dd}|dd}|dd}|dd| _|dd}||jO }|dd}|r||jO }||d< |dd}| j|i | t j|i | || _dd | D | _tdd |  dd	d D | _d| _|s|  }| || |r| | |r|j|j|j |j!|j"|j#|j$fD ]}|| j%|< qt&| j%|j'< | j(|j)@ | _*| j*r |d	ur | +| g | _,d	S )aZ  
        Create a connection to the database. It is strongly recommended
        that you only use keyword parameters. Consult the MySQL C API
        documentation for more information.

        :param str host:        host to connect
        :param str user:        user to connect as
        :param str password:    password to use
        :param str passwd:      alias of password (deprecated)
        :param str database:    database to use
        :param str db:          alias of database (deprecated)
        :param int port:        TCP/IP port to connect to
        :param str unix_socket: location of unix_socket to use
        :param dict conv:       conversion dictionary, see MySQLdb.converters
        :param int connect_timeout:
            number of seconds to wait before the connection attempt fails.

        :param bool compress:   if set, compression is enabled
        :param str named_pipe:  if set, a named pipe is used to connect (Windows only)
        :param str init_command:
            command which is run once the connection is created

        :param str read_default_file:
            file from which default client values are read

        :param str read_default_group:
            configuration group to use from the default file

        :param type cursorclass:
            class object, used to create cursors (keyword only)

        :param bool use_unicode:
            If True, text-like columns are returned as unicode objects
            using the connection's character set. Otherwise, text-like
            columns are returned as bytes. Unicode objects will always
            be encoded to the connection's character set regardless of
            this setting.
            Default to True.

        :param str charset:
            If supplied, the connection character set will be changed
            to this character set.

        :param str collation:
            If ``charset`` and ``collation`` are both supplied, the
            character set and collation for the current connection
            will be set.

            If omitted, empty string, or None, the default collation
            for the ``charset`` is implied.

        :param str auth_plugin:
            If supplied, the connection default authentication plugin will be
            changed to this value. Example values:
            `mysql_native_password` or `caching_sha2_password`

        :param str sql_mode:
            If supplied, the session SQL mode will be changed to this
            setting.
            For more details and legal values, see the MySQL documentation.

        :param int client_flag:
            flags to use or 0 (see MySQL docs or constants/CLIENTS.py)

        :param bool multi_statements:
            If True, enable multi statements for clients >= 4.1.
            Defaults to True.

        :param str ssl_mode:
            specify the security settings for connection to the server;
            see the MySQL documentation for more details
            (mysql_option(), MYSQL_OPT_SSL_MODE).
            Only one of 'DISABLED', 'PREFERRED', 'REQUIRED',
            'VERIFY_CA', 'VERIFY_IDENTITY' can be specified.

        :param dict ssl:
            dictionary or mapping contains SSL connection parameters;
            see the MySQL documentation for more details
            (mysql_ssl_set()).  If this is set, and the client does not
            support SSL, NotSupportedError will be raised.
            Since mysqlclient 2.2.4, ssl=True is alias of ssl_mode=REQUIRED
            for better compatibility with PyMySQL and MariaDB.

        :param str server_public_key_path:
            specify the path to a file RSA public key file for caching_sha2_password.
            See https://dev.mysql.com/doc/refman/9.0/en/caching-sha2-pluggable-authentication.html

        :param bool local_infile:
            enables LOAD LOCAL INFILE; zero disables

        :param bool autocommit:
            If False (default), autocommit is disabled.
            If True, autocommit is enabled.
            If None, autocommit isn't set and server default is used.

        :param bool binary_prefix:
            If set, the '_binary' prefix will be used for raw byte query
            arguments (e.g. Binary). This is disabled by default.

        There are a number of undocumented, non-standard methods. See the
        documentation for the MySQL C API for some hints on what they do.
        r   )CLIENT
FIELD_TYPE)conversions_bytes_or_strdbdatabasepasswdpasswordconvNcursorclasscharset 	collationuse_unicodeTsql_modebinary_prefixFclient_flagmulti_statements
autocommitc                 S   s"   i | ]\}}t |tur||qS r   )typer   ).0kvr   r   r   
<dictcomp>   s
    z'Connection.__init__.<locals>.<dictcomp>c                 S   s   g | ]}t |qS r   )r    )r6   nr   r   r   
<listcomp>   s    z'Connection.__init__.<locals>.<listcomp>.   ascii)-MySQLdb.constantsr"   r#   MySQLdb.convertersr$   r%   copypopitems
isinstancer   listdefault_cursorget_binary_prefixMULTI_RESULTSMULTI_STATEMENTS_set_attributessuper__init__r+   encoderstupleget_server_infosplit_server_versionencodingcharacter_set_nameset_character_setset_sql_modeSTRING
VAR_STRINGVARCHAR	TINY_BLOBMEDIUM_BLOB	LONG_BLOBBLOB	converterstrJSONserver_capabilitiesTRANSACTIONS_transactionalr4   messages)selfargskwargsr"   r#   r$   r%   kwargs2r*   conv2r7   r8   r+   r,   r.   r/   r0   r2   r3   r4   t	__class__r   r   rM   8   sx   g




	


zConnection.__init__Nr-     c                 K   s(   |r|sd}|| _ || _|| _|| _dS )zset some attributes for otel	localhostN)hostuserr'   r&   )re   ro   rp   r)   r'   portunix_socketrg   r   r   r   rK      s   
zConnection._set_attributesc                 C   s   | S Nr   re   r   r   r   	__enter__   s   zConnection.__enter__c                 C   s   |    d S rs   )close)re   exc_type	exc_value	tracebackr   r   r   __exit__  s   zConnection.__exit__c                 C   s*   t |}|  |krtj| | d S d S rs   )boolget_autocommitr   
connectionr4   )re   onr   r   r   r4     s   zConnection.autocommitc                 C   s   |p| j | S )z
        Create a cursor on which queries may be performed. The
        optional cursorclass parameter is used to create the
        Cursor. By default, self.cursorclass=cursors.Cursor is
        used.
        )r+   )re   r+   r   r   r   cursor  s   zConnection.cursorc                 C   s$   t |tr	t|}tj| | d S rs   )rD   	bytearraybytesr   r}   query)re   r   r   r   r   r     s   
zConnection.queryc                 C   s.   t |ttfs	J | |}| jrd| S |S )Ns   _binary)rD   r   r   string_literalrH   )re   bsxr   r   r   _bytes_literal  s
   
zConnection._bytes_literalc                 C   s   dd t| j| S )Ns   (%s)   ,)joinmapliteral)re   rj   r   r   r   _tuple_literal!  s   zConnection._tuple_literalc                 C   s   t |tr| || j}n5t |tr| |}n*t |tr%| |}nt |tt	fr2| 
|}n| || j}t |trD|| j}t |tsKJ |S )a  If o is a single object, returns an SQL literal as a string.
        If o is a non-string sequence, the items of the sequence are
        converted and returned as a sequence.

        Non-standard. For internal use; do not use this in your
        applications.
        )rD   r_   r   encoderS   r   r   r   rO   rE   r   escaperN   )re   or   r   r   r   r   $  s   



zConnection.literalc                 C   s   |  d dS )ziExplicitly begin a connection.

        This method is not used when autocommit=False (default).
        s   BEGINN)r   rt   r   r   r   begin;  s   zConnection.beginc                    sD   t  | t||| _|r | d| d|  |   dS dS )z,Set the connection character set to charset.z
SET NAMES z	 COLLATE N)rL   rU   _charset_to_encodingrG   rS   r   store_result)re   r,   r.   rk   r   r   rU   B  s   zConnection.set_character_setc                 C   s,   | j dk r	td| d|  |   dS )zNSet the connection sql_mode. See MySQL documentation for
        legal values.   r   z!server is too old to set sql_modezSET SESSION sql_mode='%s'N)rR   r   r   r   )re   r0   r   r   r   rV   J  s   
zConnection.set_sql_modec                 C   s.   | j dk rdS | d |  }|d}|S )zReturn detailed information about warnings as a
        sequence of tuples of (Level, Code, Message). This
        is only supported in MySQL-4.1 and up. If your server
        is an earlier version, an empty sequence is returned.r   r   zSHOW WARNINGSr   )rR   r   r   	fetch_row)re   rwarningsr   r   r   show_warningsR  s   


zConnection.show_warnings)NNNr-   rm   Nrs   ) __name__
__module____qualname____doc__r   CursorrF   rM   rK   ru   rz   r4   r   r   r   r   r   r   rU   rV   r   r   r   r   r	   r   r
   r   r   r   r   __classcell__r   r   rk   r   r!   3   s<     :

	r!   )r   rer-   r   r   _exceptionsr   r   r   r   r	   r
   r   r   r   r   r   compiler   r    r}   r!   r   r   r   r   <module>   s    0
