
    {vg0                         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j        d          Zd Z G 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                     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ms     P/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/MySQLdb/connections.pynumeric_partr!   #   s:     	a  A 1771::4    c                        e Zd ZdZej        Z fdZd Zd Z	d Z
ddZd Zd	 Zd
 Zd Zd Zd fd	Zd Zd ZeZeZeZeZeZeZeZeZeZeZ xZS )
Connectionz MySQL Database Connection Objectc                 0   ddl m}m} ddlm}m} |                                }d|v r|                    d          |d<   d|v r|                    d          |d<   d|v r	|d         }n|}i }	|                                D ]B\  }
}t          |
t                    r#t          |t                    r|d	d	         |	|
<   =||	|
<   C|	|d<   |                    d
| j                  }|                    dd          }|                    dd          }|                    dd          }|                    dd          }|                    dd          | _        |                    dd          }||j        z  }|                    dd          }|r
||j        z  }||d<   |                    dd          } t#                      j        |i | || _        d |                                D             | _        t+          d |                                                     d          d	d         D                       | _        d| _        |s|                                 }|                     ||           |r|                     |           |rM|j        |j        |j        |j         |j!        |j"        |j#        fD ]}|| j$        |<   tJ          | j$        |j&        <   | j'        |j(        z  | _)        | j)        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                 F    i | ]\  }}t          |          t          u||S  )typer   ).0kvs      r    
<dictcomp>z'Connection.__init__.<locals>.<dictcomp>   s9     
 
 
1Awwc!! q!!!r"   c                 ,    g | ]}t          |          S r:   )r!   )r<   ns     r    
<listcomp>z'Connection.__init__.<locals>.<listcomp>   s    LLL\!__LLLr"   .   ascii),MySQLdb.constantsr&   r'   MySQLdb.convertersr(   r)   copypopitems
isinstancer   listdefault_cursorget_binary_prefixMULTI_RESULTSMULTI_STATEMENTS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_transactionalr8   messages)selfargskwargsr&   r'   r(   r)   kwargs2r.   conv2r=   r>   r/   r0   r2   r3   r4   r6   r7   r8   t	__class__s                        r    rS   zConnection.__init__8   su   N 	98888888AAAAAAAA++--7??")++d"3"3GJw")++h"7"7GJV&>DDDJJLL 	 	DAq!S!! jD&9&9 QQQ4aakk-1DEE++i,,KKR00	kk-66;;z2..%kk/5AAjj22v++";;'94@@ 	3622K!, [[u55
$*'***&
 



 
 
  %LLd&:&:&<&<&B&B3&G&G&KLLL 
  
   	0--//Gw	222 	(h''' 	2!%"$&$ 	2 	2 %2q!! /2DN:?+"69LL 	,%
+++r"   c                     | S Nr:   rk   s    r    	__enter__zConnection.__enter__   s    r"   c                 .    |                                   d S rs   )close)rk   exc_type	exc_value	tracebacks       r    __exit__zConnection.__exit__   s    

r"   c                     t          |          }|                                 |k    r"t          j                            | |           d S d S rs   )boolget_autocommitr   
connectionr8   )rk   ons     r    r8   zConnection.autocommit   sK    "XX  B&&((r22222 '&r"   Nc                 &     |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/   )rk   r/   s     r    cursorzConnection.cursor   s     0/t/666r"   c                     t          |t                    rt          |          }t          j                            | |           d S rs   )rK   	bytearraybytesr   r   query)rk   r   s     r    r   zConnection.query  s>    eY'' 	!%LLEe,,,,,r"   c                     t          |t          t          f          sJ |                     |          }| j        rd|z   S |S )Ns   _binary)rK   r   r   string_literalrO   )rk   bsxs      r    _bytes_literalzConnection._bytes_literal  sJ    "ui011111## 	">!r"   c                 X    dd                     t          | j        |                    z  S )Ns   (%s)   ,)joinmapliteral)rk   rp   s     r    _tuple_literalzConnection._tuple_literal  s%    $))Ca$8$899::r"   c                 ^   t          |t                    r.|                     |                    | j                            }nt          |t
                    r|                     |          }nt          |t                    r|                     |          }n|t          |t          t          f          r| 
                    |          }nJ|                     || j                  }t          |t                    r|                    | j                  }t          |t                    sJ |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   re   r   encoderY   r   r   r   rU   rL   r   escaperT   )rk   or   s      r    r   zConnection.literal  s    a 	,##AHHT]$;$;<<AA9%% 		,##A&&AA5!! 	,##A&&AAE4=)) 	,##A&&AAAt}--A!S!! ,HHT]++!U#####r"   c                 0    |                      d           dS )ziExplicitly begin a connection.

        This method is not used when autocommit=False (default).
        s   BEGINN)r   rt   s    r    beginzConnection.begin,  s    
 	

8r"   c                     t                                          |           t                              ||          | _        |r1|                     d| d|            |                                  dS dS )z,Set the connection character set to charset.z
SET NAMES z	 COLLATE N)rR   r[   _charset_to_encodingrN   rY   r   store_result)rk   r0   r2   rq   s      r    r[   zConnection.set_character_set3  s    !!'***,00'BB 	 JJAGAAiAABBB	  	 r"   c                     | j         dk     rt          d          |                     d|z             |                                  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)rX   r   r   r   )rk   r4   s     r    r\   zConnection.set_sql_mode;  sQ     &((#$GHHH

.9:::r"   c                     | 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   )rX   r   r   	fetch_row)rk   rwarningss      r    show_warningszConnection.show_warningsC  sN    
 &((2

?###;;q>>r"   rs   )__name__
__module____qualname____doc__r   CursorrM   rS   ru   r{   r8   r   r   r   r   r   r   r[   r\   r   r   r   r   r
   r	   r   r   r   r   r   __classcell__)rq   s   @r    r$   r$   3   sB       **^Nw w w w wr    3 3 3
7 7 7 7- - -  ; ; ;  .               
 
 
 GE#N!MI'#N!M')r"   r$   )r   rer1   r   r   _exceptionsr   r   r   r	   r
   r   r   r   r   r   r   compiler   r!   r   r$   r:   r"   r    <module>r      s+    
			                                   "*Y''   e* e* e* e* e*" e* e* e* e* e*r"   