o
    b^1                     @   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)Zutf8mb4Zutf8mb3latin1Zkoi8rZ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   R/var/www/secure340b-portal/env/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 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eejds>dd Z 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                    s  ddl m}m} ddlm}m} ddlm} | }d|v r%|	d|d< d|v r0|	d|d< d	|v r9|d	 }	n|}	i }
|	
 D ]\}}t|trXt|trX|d
d
 |
|< qA||
|< qA|
|d	< |	d| j}|dd}|	dd}|	dd}|	dd| _|dd}tdd t dd
d D }|dkr||jO }|dkr||jO }||d< |	dd}t j|i | || _dd |	
 D | _t| jt< tdd |  dd
d D | _d| _||  d! fdd 	}|s|  }|  | |r| !| |r&|j"|j#|j$|j%|j&|j'|j(fD ]}|| j)|< qt*| j)|j+< || jt*< | j,|j-@ | _.| j.r@|d
ur@| /| g | _0d
S )"aQ  
        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, for backward compatibility
        :param str database:    database to use
        :param str db:          alias of database, for backward compatibility
        :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 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 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.

        :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)proxyZdatabasedbpasswordpasswdconvNcursorclasscharset use_unicodeTsql_modeZbinary_prefixFclient_flagc                 S      g | ]}t |qS r   r   .0nr   r   r   
<listcomp>       z'Connection.__init__.<locals>.<listcomp>.      r   )   r   
autocommitc                 S   s"   i | ]\}}t |tur||qS r   )typer   )r0   kvr   r   r   
<dictcomp>   s   " z'Connection.__init__.<locals>.<dictcomp>c                 S   r-   r   r.   r/   r   r   r   r2      r3   asciic                    s     |  jS N)string_literalencodeencoding)udummyr#   r   r   unicode_literal   s   z,Connection.__init__.<locals>.unicode_literalr?   )1ZMySQLdb.constantsr   r   ZMySQLdb.convertersr    r!   weakrefr"   copypopitems
isinstancer   listdefault_cursorget_binary_prefixtupler   Zget_client_infosplitZMULTI_STATEMENTSZMULTI_RESULTSsuper__init__r'   encodersbytesZget_server_info_server_versionrB   character_set_nameset_character_setset_sql_modeSTRINGZ
VAR_STRINGZVARCHARZ	TINY_BLOBZMEDIUM_BLOBZ	LONG_BLOBZBLOB	converterstrJSONZserver_capabilitiesZTRANSACTIONSZ_transactionalr9   messages)selfargskwargsr   r   r    r!   r"   Zkwargs2r&   Zconv2r;   r<   r'   r(   r*   r+   r,   client_versionr9   rF   t	__class__rE   r   rS   8   s   U






	



zConnection.__init__c                 C   s   | S r?   r   r_   r   r   r   	__enter__   s   zConnection.__enter__c                 C   s   |    d S r?   )close)r_   exc_type	exc_value	tracebackr   r   r   __exit__   s   zConnection.__exit__c                 C   s*   t |}|  |krtj| | d S d S r?   )boolZget_autocommitr   
connectionr9   )r_   onr   r   r   r9      s   zConnection.autocommitNc                 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'   )r_   r'   r   r   r   cursor   s   zConnection.cursorc                 C   s$   t |tr	t|}tj| | d S r?   )rK   	bytearrayrU   r   rn   query)r_   rr   r   r   r   rr      s   
zConnection.queryc                 C   s.   t |ttfs	J | |}| jrd| S |S )Ns   _binary)rK   rU   rq   r@   rO   )r_   bsxr   r   r   _bytes_literal  s
   
zConnection._bytes_literalc                 C   s   dd t| j| S )Ns   (%s)   ,)joinmapliteral)r_   rc   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.
        )rK   r\   r@   rA   rB   rq   ru   rU   rP   rL   rz   escaperT   )r_   or   r   r   r   ry     s   



zConnection.literalc                 C   s   |  d dS )ziExplicitly begin a connection.

        This method is not used when autocommit=False (default).
        s   BEGINN)rr   rf   r   r   r   begin&  s   zConnection.beginwarning_countc                 C   s    |   }|rt| d S dS )zpReturn the number of warnings generated from the
            last query. This is derived from the info() method.r   )infor   rQ   )r_   r   r   r   r   r~   /  s   zConnection.warning_countc                    sn   t ||}|  |kr2zt | W n ty1   | jdk r$td| d|  | 	  Y nw || _
dS )zSet the connection character set to charset. The character
        set can only be changed in MySQL-4.1 and newer. If you try
        to change the character set from the current value in an
        older version, NotSupportedError will be raised.r6   z server is too old to set charsetzSET NAMES %sN)_charset_to_encodingrN   rW   rR   rX   AttributeErrorrV   r   rr   store_resultrB   )r_   r(   Z
py_charsetrd   r   r   rX   8  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.r6   z!server is too old to set sql_modezSET SESSION sql_mode='%s'N)rV   r   rr   r   )r_   r+   r   r   r   rY   H  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.r6   r   zSHOW WARNINGSr   )rV   rr   r   Z	fetch_row)r_   rwarningsr   r   r   show_warningsP  s   


zConnection.show_warningsr?   )#__name__
__module____qualname____doc__r   CursorrM   rS   rg   rl   r9   rp   rr   ru   rz   ry   r}   hasattrr   rn   r~   rX   rY   r   r   r   r   r	   r   r
   r   r   r   r   __classcell__r   r   rd   r   r   3   s:     4
		r   )r   rer)   r   r   _exceptionsr   r   r   r   r	   r
   r   r   r   r   r   compiler   r   rn   r   r   r   r   r   <module>   s    0
