o
    LDi                     @   s(  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 e
dddd Z
edddd Zedddd Ze	dddd Zedddd ZeddddddZedddd Zeddd  ZdS )!    N   )event)exc)allow_stale_update_impl)configure_follower)	create_db)delete_from_all_tables)drop_db)generate_driver_url)temp_table_keyword_args)upsertmysqlmariadbc                 C   s   |   }|dkr|  }|| rd}| jd||f d|}|dkr+|dg}n
|dkr5|dg}z|  W |S  tjyG   Y d S w )	Nr   r   z%s+%s)
drivernamemariadbconnectorcharsetmysqlconnector)	collationutf8mb4_general_ci)	get_backend_nameget_dialect_is_mariadb_from_urlsetupdate_query_stringdifference_update_queryupdate_query_pairsr   NoSuchModuleError)urldriver	query_strbackenddialect_clsnew_url r#   o/var/www/www-root/data/www/77.83.87.30/venv/lib/python3.10/site-packages/sqlalchemy/dialects/mysql/provision.pyr
      s,   


r
   c              	   C   s   |  }zt| || W n	 ty   Y nw W d    n1 s!w   Y  |  }|d|  |d|  |d|  W d    d S 1 sKw   Y  d S )Nz(CREATE DATABASE %s CHARACTER SET utf8mb4z4CREATE DATABASE %s_test_schema CHARACTER SET utf8mb4z6CREATE DATABASE %s_test_schema_2 CHARACTER SET utf8mb4)begin_mysql_drop_db	Exceptionexec_driver_sqlcfgengidentconnr#   r#   r$   _mysql_create_db>   s&   

"r.   c                 C   s   d| | _ d| | _d S )Nz%s_test_schemaz%s_test_schema_2)test_schematest_schema_2)configr,   r#   r#   r$   _mysql_configure_followerR   s   
r2   c                 C   sX   |  }|d|  |d|  |d|  W d    d S 1 s%w   Y  d S )NzDROP DATABASE %s_test_schemazDROP DATABASE %s_test_schema_2zDROP DATABASE %s)r%   r(   r)   r#   r#   r$   r&   X   s
   
"r&   c                 C   s
   ddgiS )Nprefixes	TEMPORARYr#   )r*   r+   r#   r#   r$   _mysql_temp_table_keyword_args`   s   
r5   F)
set_lambdasort_by_parameter_orderc                C   s`   ddl m} ||}|r|jdi ||j}n|jjd }||j|i}|j|d|i}|S )Nr   )insertr7   r#   )sqlalchemy.dialects.mysqlr8   on_duplicate_key_updateinsertedprimary_keyckey	returning)r*   tabler?   r6   r7   r8   stmtpk1r#   r#   r$   _upserte   s   rC   c              	   C   s6   |  d zt| || W |  d d S |  d w )NzSET foreign_key_checks = 0zSET foreign_key_checks = 1)r(   r   call_original)
connectionr*   metadatar#   r#   r$   _delete_from_all_tablesy   s   
rG   c                    s   t j fdd}| S )Nc                  3   s\    t  jddd } zd V  W t  jd|   j  d S t  jd|   j  w )Nengine_connectc                 S   s   |  d |   d S )Nz%SET innodb_snapshot_isolation = 'OFF')r(   rollback)r-   r#   r#   r$   turn_off_snapshot_isolation   s   
zI_allow_stale_update_impl.<locals>.go.<locals>.turn_off_snapshot_isolation)r   listens_fordbremovedispose)rJ   r*   r#   r$   go   s   
z$_allow_stale_update_impl.<locals>.go)
contextlibcontextmanager)r*   rP   r#   rO   r$   _allow_stale_update_impl   s   rS   )rQ    r   r   testing.provisionr   r   r   r   r	   r
   r   r   for_dbr.   r2   r&   r5   rC   rG   rS   r#   r#   r#   r$   <module>   s8   


'








