https://t.me/RX1948
Server : Apache
System : Linux iad1-shared-b8-43 6.6.49-grsec-jammy+ #10 SMP Thu Sep 12 23:23:08 UTC 2024 x86_64
User : dh_edsupp ( 6597262)
PHP Version : 8.2.26
Disable Function : NONE
Directory :  /lib/python3/dist-packages/trac/db/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //lib/python3/dist-packages/trac/db/__pycache__/mysql_backend.cpython-310.pyc
o

�k�`AS�@sdddlZddlZddlZddlmZddlmZmZddlm	Z	ddl
TddlmZddl
mZmZmZmZmZddlmZmZdd	lmZmZdd
lmZddlmZddlmZmZdd
l m!Z!e�"d�Z#zddl$Z$Wn
e%yzdZ$dZ&Ynwee$��'de$j(�Z&Gdd�de$j)j*�Z+Gdd�de+�Z,ddd�Z-dd�Z.Gdd�de/�Z0Gdd�dee�Z1dS)�N)�closing)�Popen�PIPE)�IEnvironmentSetupParticipant)�*)�Option)�ConnectionBase�DatabaseManager�IDatabaseConnector�get_column_names�parse_connection_uri)�ConnectionWrapper�IterableCursor)�as_int�get_pkginfo)�Markup)�	close_fds)�exception_to_unicode�
to_unicode)�_z([/_%])�versioncs6eZdZd�fdd�	Z�fdd�Z�fdd�Z�ZS)	�MySQLUnicodeCursorNcs$|rtdd�|D��}t��||�S)Ncs�&�|]}t|t�r
t|�n|VqdS�N��
isinstancer�str��.0�arg�r �7/usr/lib/python3/dist-packages/trac/db/mysql_backend.py�	<genexpr>0���z-MySQLUnicodeCursor.execute.<locals>.<genexpr>)�tuple�super�execute��self�query�args��	__class__r r!r&.s
�zMySQLUnicodeCursor.executecs |r	dd�|D�}t��||�S)NcSsg|]}tdd�|D���qS)csrrr)r�itemr r r!r"6r#z<MySQLUnicodeCursor.executemany.<locals>.<listcomp>.<genexpr>)r$rr r r!�
<listcomp>6s
��z2MySQLUnicodeCursor.executemany.<locals>.<listcomp>)r%�executemanyr'r+r r!r/4s
�zMySQLUnicodeCursor.executemanycstt����Sr)�listr%�fetchall�r(r+r r!r1;�zMySQLUnicodeCursor.fetchallr)�__name__�
__module__�__qualname__r&r/r1�
__classcell__r r r+r!r-src@seZdZddd�ZdS)�MySQLSilentCursorNcC�dSrr )r(�connr r r!�_show_warnings?�z MySQLSilentCursor._show_warningsr)r4r5r6r;r r r r!r8>sr8�bigint�
mediumtext)�int64�textcCsd|�dd�S)Nz`%s`�`z``)�replace)�
identifierr r r!�_quoteJsrDc@seZdZdZeee�dZedddd�Z	dd�Z
d	d
�Zdddddifdd
�Zdd�Z
ddddddifdd�Zdddddifdd�Zdddddifdd�Zdd�ZdZdd�Zd/dd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)Zd*d+�Zd,Zd-d.�ZdS)0�MySQLConnectora�Database connector for MySQL version 4.1 and greater.

    Database URLs should be of the form::

      {{{
      mysql://user[:password]@host[:port]/database[?param1=value&param2=value]
      }}}

    The following parameters are supported:
     * `compress`: Enable compression (0 or 1)
     * `init_command`: Command to run once the connection is created
     * `named_pipe`: Use a named pipe to connect on Windows (0 or 1)
     * `read_default_file`: Read default client values from the given file
     * `read_default_group`: Configuration group to use from the default file
     * `unix_socket`: Use a Unix socket at the given path to connect
    F�trac�mysqldump_path�	mysqldumpz0Location of mysqldump for MySQL database backupscCs(trdt��t��f|_dSd|_dS)Nz6server: (not-connected), client: "%s", thread-safe: %s)�pymysql�get_client_info�thread_safe�_mysql_versionr2r r r!�__init__fs��
zMySQLConnector.__init__ccs�dVdS)N)�mysql�r r2r r r!�get_supported_schemesps�
z$MySQLConnector.get_supported_schemesNc	CsBt|||||||�}|jsd|j��t��t��f|_d|_|S)Nz+server: "%s", client: "%s", thread-safe: %sT)�MySQLConnection�required�cnx�get_server_inforIrJrKrL�	r(�path�log�user�password�host�port�paramsrSr r r!�get_connectionss���zMySQLConnector.get_connectioncCstSr)rIr2r r r!�get_exceptions~r<zMySQLConnector.get_exceptionsc		Cs�|�|||||||�}	|�|	�|�|	�}
|	��}|dur#ddlm}|D]}|j||
d�D]
}
|j�|
�|�	|
�q.q%|�
|	�|	��dS)Nr��schema��	max_bytes)r]�_verify_variables�
_max_bytes�cursor�trac.db_defaultr`�to_sqlrW�debugr&�_verify_table_status�commit)r(rVr`rWrXrYrZr[r\rSrbre�table�stmtr r r!�init_db�s�

�
zMySQLConnector.init_dbc
	Cs:|�|||||||�}|��D]}	|�|	�q|��dSr)r]�get_table_names�
drop_tablerj)
r(rVrWrXrYrZr[r\rS�
table_namer r r!�
destroy_db�s�zMySQLConnector.destroy_dbc		Cs"|�|||||||�}t|���Sr)r]�boolrnrUr r r!�	db_exists�s�zMySQLConnector.db_existscCsl|dur+t|j���\}}t|jdi|����}|j}Wd�n1s%wYn|j}|dkr4dSdS)N�utf8mb4��r )r	�env�
get_connectorrr]�charset)r(rS�	connectorr*ryr r r!rd�s��zMySQLConnector._max_bytesic	s�g}d|}t|j|t|�|�}|D]@�t��}tt�fdd�|j��}t|�dkrO|dj��dkrO|dj	durI|dt|dj	|�7}n|d	|7}|�
|�qd
�|�S)z�Take a list of columns and impose limits on each so that indexing
        works properly.

        Some Versions of MySQL limit each index prefix to 3072 bytes total,
        with a max of 767 bytes per column.
        i�cs
|j�kSr��name)�x��cr r!�<lambda>�s
z)MySQLConnector._collist.<locals>.<lambda>rOrr@Nz(%d)z(%s)�,)�min�_max_key_length�lenrDr0�filter�columns�type�lower�key_size�append�join)	r(rkr�rb�cols�	limit_col�limitr|�	table_colr r~r!�_collist�s�
zMySQLConnector._collistc

cs�|dur
|�d�}dt|j�g}g}|jD]}|j}t�||�}|jr*d}d|_|�dt|j�|f�qt	|j
�dkrL|�d|j||j
|d��|�d�|�d	�d
�|�V|j
D])}|jrfdnd}d
|jd�|j�f}	d|t|	�t|j�|j||j|d�fVq_dS)NzCREATE TABLE %s (z$INT UNSIGNED NOT NULL AUTO_INCREMENT�intz	    %s %srz    PRIMARY KEY (%s)raz,
z
)�
�UNIQUE�z	%s_%s_idxrzCREATE %s INDEX %s ON %s (%s))rdrDr|r�r��	_type_map�get�auto_incrementr�r��keyr�r��indices�unique)
r(rkrb�sql�coldefs�column�ctype�indexr��idxnamer r r!rg�s:�


��
���zMySQLConnector.to_sqlccst�g}t|���D]\}\}}t�||�}|t�||�kr$|�||f�q	|r8d|d�dd�|D��fVdSdS)z�Yield SQL statements altering the type of one or more columns of
        a table.

        Type changes are specified as a `columns` dict mapping column names
        to `(from, to)` SQL type tuples.
        zALTER TABLE %s %s�, css�|]}d|VqdS)zMODIFY %s %sNr )r�eachr r r!r"�s��z4MySQLConnector.alter_column_types.<locals>.<genexpr>N)�sorted�itemsr�r�r�r�)r(rkr��alterationsr|�from_�tor r r!�alter_column_types�s��
���z!MySQLConnector.alter_column_typesc
Cs�|jj�dd�}t|�\}}|�di�}tj�|d�}|jdg}d|vr.|�	d|dg�d|vr=|�	d	t
|d�g�d
|vrJ|�	d|d
g�|��D]H\}}	|dkrat|	d
�ra|�
d�qN|dkrpt|	d
�rp|�
d�qN|dkr}|�dd|	�qN|dkr�|�	dd|	g�qN|dvr�|j�d|�qN|�	d||g�tj��}
d|vr�t
|d�|
d<z
t||
ttd�}Wnty�}zttd|jt|�d���d}~ww|��d}
|jd
kr�ttdt|
���d ���tj�|�s�ttd!���|S)"NrF�databaser\rVz
--no-defaultsrZz-hr[z-PrXz-u�compressrz
--compress�
named_pipez--protocol=pipe�read_default_filerOz--defaults-file=�unix_socketz--protocol=socketz	--socket=)�init_command�read_default_group�(Invalid connection string parameter '%s'z-rrY�	MYSQL_PWD)rw�stderrrzUnable to run %(path)s: %(msg)s)rV�msgzmysqldump failed: %(msg)s)r�zNo destination file created)rw�configr�r�
setdefault�osrV�basenamerG�extendrr�rr��insertrW�warning�environ�copyrrr�OSError�	TracErrorrr�communicate�
returncoder�strip�exists)r(�	dest_file�db_url�scheme�db_prop�	db_params�db_namer*r|�valuer��p�e�errmsgr r r!�backup�s\
��
���

�zMySQLConnector.backupccs�d|jfVtjtfVdS)N�MySQL)rLrIr4�pymsql_versionr2r r r!�get_system_infos�zMySQLConnector.get_system_infocCr9rr r2r r r!�environment_created!r<z"MySQLConnector.environment_createdcCsH|jr"|jj�}|�|�|�|�Wd�dS1swYdS)NF)rRrw�db_queryrirc)r(�dbr r r!�environment_needs_upgrade$s


��z(MySQLConnector.environment_needs_upgradecCr9rr r2r r r!�upgrade_environment+r<z"MySQLConnector.upgrade_environment)�MyISAM�EXAMPLE�ARCHIVE�CSV�ISAMcs�ddlm}dd�|D�}|��}|�dd�dt|��|�t|���fdd�|D�}�fd	d�|D�}|rCttd
d�|�d���d
d�|D�}|rWttdd�|�d���dS)Nrr_cSsg|]}|j�qSr r{)r�tr r r!r.2sz7MySQLConnector._verify_table_status.<locals>.<listcomp>z$SHOW TABLE STATUS WHERE name IN (%s)r�)z%scsg|]	}tt�|���qSr )�dict�zip�r�row)r�r r!r.8scs"g|]
}|d�jvr|d�qS)�Engine�Name)�UNSUPPORTED_ENGINESr�r2r r!r.:s�z�All tables must be created as InnoDB or NDB storage engine to support transactions. The following tables have been created as storage engine which doesn't support transactions: %(tables)sr�)�tablescSs g|]}|ddvr|d�qS)�	Collation)�utf8_bin�utf8mb4_binNr�r r�r r r!r.Cs�z�All tables must be created with utf8_bin or utf8mb4_bin as collation. The following tables don't have the collations: %(tables)s)	rfr`rer&r�r�rr�r)r(r�r`r�re�rows�engines�non_utf8binr )r�r(r!ri0s,�����z#MySQLConnector._verify_table_status))�utf8r�)rtr�cCs�|��}|�d�dd�|D�}|�d�p|�d�}||jvr'ttd|d���|�d�}||jvr9ttd	|d���|d
}|d}||f|jvrUttd||t|j�d
���dS)Nz�SHOW VARIABLES WHERE variable_name IN ('default_storage_engine','storage_engine','default_tmp_storage_engine','character_set_database','collation_database')cSsi|]}|d��|d�qS)rrO)r�r�r r r!�
<dictcomp>Tsz4MySQLConnector._verify_variables.<locals>.<dictcomp>�default_storage_engine�storage_enginezjThe current storage engine is %(engine)s. It must be InnoDB or NDB storage engine to support transactions.)�engine�default_tmp_storage_enginezThe current storage engine for TEMPORARY tables is %(engine)s. It must be InnoDB or NDB storage engine to support transactions.�character_set_database�collation_databasez�The charset and collation of database are '%(charset)s' and '%(collation)s'. The database must be created with one of %(supported)s.)ry�	collation�	supported)rer&r�r�r�r�SUPPORTED_COLLATIONS�repr)r(r�re�varsr��
tmp_engineryr�r r r!rcNs0

�
�

���z MySQLConnector._verify_variablesr)r4r5r6�__doc__�
implementsr
rrRrrGrMrPr]r^rmrqrsrdr�r�rgr�r�r�r�r�r�r�rir�rcr r r r!rENsH
�

�
�
�
�	
,rEc@s�eZdZdZdZddddifdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
d-dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd-d+d,�ZdS).rQzConnection wrapper for MySQL.TNc
Csv|�d�r|dd�}|durd}|durd}ddi}|��D]L\}	}
|	dkr,|
||	<q|	dkr5|
||	<q|	d	vr>|
||	<q|	d
vrJt|
d�||	<q|	dkrd|
��}
|
dvr[|
||	<q|j�d
|	|
�q|j�d|	�qtjd|||||d�|��}|��}|�	d�|�
�d|_|��|j|dkr�|��|j|d<tjd|||||d�|��}||_
t�|||�d|_dS)N�/rOr�i�ryr�r�r�)r�r�)r�r�r)r�rtz+Invalid connection string parameter '%s=%s'r�)r�rX�passwdrZr[z<SHOW VARIABLES WHERE  variable_name='character_set_database'Fr )�
startswithr�rr�rWr�rI�connectrer&�fetchonery�closer`r
rM�
_is_closed)
r(rVrWrXrYrZr[r\�optsr|r�rSrer r r!rMss\




����

��
zMySQLConnection.__init__cCstt|j�|j�Sr)rrrSrWr2r r r!re�szMySQLConnection.cursorcCs8|j��z|j��WdStjyd|_YdSw�NT)rS�ping�rollbackrI�ProgrammingErrorrr2r r r!r�s
�zMySQLConnection.rollbackcCs8|jsz|j��Wn
tjyYnwd|_dSdSr)rrSr�rIrr2r r r!r��s�
�zMySQLConnection.closecCs&|dvrd}n|dkr
d}d||fS)N)r�r?�signedr@�charzCAST(%s AS %s)r )r(r�r�r r r!�cast�s
zMySQLConnection.castcGsdd�|�S)Nz
concat(%s)r�)r�)r(r*r r r!�concat�r3zMySQLConnection.concatc	Cs�tj�|j�}||�|�vrt|�|�}|�d|�t|�}i}|��D]}tt	||��}|�
|dg��|d�q$|��D]&\}}t
|�dkre||vre|dkrY|�d|�q?|�d||�|�f�q?|�d||�|�f�dSdS)	NzSHOW INDEX FROM %s�Key_name�Column_namerO�PRIMARYzALTER TABLE %s DROP PRIMARY KEYzALTER TABLE %s DROP KEY %szALTER TABLE %s DROP COLUMN %s )rI�cursors�CursorrSr�quoter&r1r�r�r�r�r�r�)	r(rkr�re�quoted_tabler��keysr�r�r r r!�drop_column�s.
���
��zMySQLConnection.drop_columncCs"t|j�}|�d|�|��dS)NzDROP TABLE IF EXISTS )r8rSr&r)r(rkrer r r!ro�s
zMySQLConnection.drop_tablecCs |�d|j|f�}dd�|D�S)Nz�
            SELECT column_name FROM information_schema.columns
            WHERE table_schema=%s AND table_name=%s
            ORDER BY ordinal_position
            cS�g|]}|d�qS�rr r�r r r!r.��z4MySQLConnection.get_column_names.<locals>.<listcomp>�r&r`�r(rkr�r r r!r�s�z MySQLConnection.get_column_names�idcCs|jSr)�	lastrowid�r(rerkr�r r r!�get_last_id�szMySQLConnection.get_last_idcCsgSrr r2r r r!�get_sequence_names�r<z"MySQLConnection.get_sequence_namescCs|�d|jf�}dd�|D�S)Nzl
            SELECT table_name FROM information_schema.tables
            WHERE table_schema=%s
            cSrrr r�r r r!r.�rz3MySQLConnection.get_table_names.<locals>.<listcomp>r)r(r�r r r!rn�s�zMySQLConnection.get_table_namescCs"|�d|j|f�}t|dd�S)Nz�
            SELECT EXISTS (SELECT * FROM information_schema.columns
                           WHERE table_schema=%s AND table_name=%s)
            r)r&r`rrrr r r!�	has_table�s�zMySQLConnection.has_tablecCs
d|jS)Nz)LIKE %%s COLLATE %s_general_ci ESCAPE '/')ryr2r r r!�like�s
zMySQLConnection.likecCst�d|�S)Nz/\1)�_like_escape_re�sub)r(r@r r r!�like_escape�szMySQLConnection.like_escapecCsrg}|js|S|��}|�d|jf�|��D]\}}|�|�|�|�}|s/|�d|�q|�d|�q|S)Naz
            SELECT t.table_name,
                   EXISTS (SELECT * FROM information_schema.columns AS c
                           WHERE c.table_schema=t.table_schema
                           AND c.table_name=t.table_name
                           AND extra='auto_increment')
            FROM information_schema.tables AS t
            WHERE t.table_schema=%s
            zDELETE FROM %szTRUNCATE TABLE %s)r`rer&r1r�r)r(�table_namesrerk�has_autoinc�quotedr r r!�reset_tables�s�	

zMySQLConnection.reset_tablescCsdS)NzLIKE %s ESCAPE '/'r r2r r r!�prefix_matchr<zMySQLConnection.prefix_matchcCs|�|�dS)N�%)r!)r(�prefixr r r!�prefix_match_valuer3z"MySQLConnection.prefix_match_valuecCst|�S)zReturn the quoted identifier.)rD)r(rCr r r!rszMySQLConnection.quotecCr9rr rr r r!�update_sequenceszMySQLConnection.update_sequence)r)r4r5r6r��poolablerMrerr�rr	rrorrrrnrrr!r%r&r)rr*r r r r!rQns2
�,
rQ)2r��re�sys�
contextlibr�
subprocessrr�trac.apir�	trac.core�trac.configr�trac.db.apirr	r
rr�trac.db.utilr
r�	trac.utilrr�trac.util.htmlr�trac.util.compatr�trac.util.textrr�trac.util.translationr�compilerrI�ImportErrorr�r��__version__r
rrr8r�rD�	ComponentrErQr r r r!�<module>sB
��"

https://t.me/RX1948 - 2025