
    z<i                        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
j                  dd      d        Z
 ej                  dd      d        Z ej                  dd      d        Z e	j                  dd      d        Z ej                  dd      d        Z ej                  d      dddd       Z ej                  dd      d        Z ej                  d      d        Zy)    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                 t   | j                         }|dk(  r#| j                         }|j                  |       rd}| j                  |d|      j	                  |      }|dk(  r|j                  dg      }n|dk(  r|j                  dg      }	 |j                          |S # t        j                  $ r Y y w xY w)	Nr   r   +)
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_urls         h/home/www/utuvibe.miabetepe.com/venv/lib/python3.12/site-packages/sqlalchemy/dialects/mysql/provision.pyr   r      s    ""$G 'oo'++C0Ggg%v.  )$  ##119+>	#	#,,01
     s   B! !B76B7c                 J   |j                         5 }	 t        | ||       d d d        |j                         5 }|j                  d|z         |j                  d|z         |j                  d|z         d d d        y # t        $ r Y iw xY w# 1 sw Y   nxY w# 1 sw Y   y xY w)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conns       r&   _mysql_create_dbr1   >   s    	 	3e, 
 	
6>	
 	BUJ	
 	DuL	
	
 	
  		 	
 	
s3   BA>=B>	B
B	B

BBB"c                 ,    d|z  | _         d|z  | _        y )Nz%s_test_schemaz%s_test_schema_2)test_schematest_schema_2)configr/   s     r&   _mysql_configure_followerr6   R   s    )E1F-5F    c                     |j                         5 }|j                  d|z         |j                  d|z         |j                  d|z         d d d        y # 1 sw Y   y xY w)NzDROP DATABASE %s_test_schemazDROP DATABASE %s_test_schema_2zDROP DATABASE %s)r(   r+   r,   s       r&   r)   r)   X   s^    	 9;eCD=EF/%789 9 9s   =AA c                     ddgiS )Nprefixes	TEMPORARY )r-   r.   s     r&   _mysql_temp_table_keyword_argsr=   `   s    &&r7   F)
set_lambdasort_by_parameter_orderc                    ddl m}  ||      }|r# |j                  di  ||j                        }n6|j                  j
                  d   }|j                  |j                  |i      } |j                  |d|i}|S )Nr   )insertr?   r<   )sqlalchemy.dialects.mysqlrA   on_duplicate_key_updateinsertedprimary_keyckey	returning)r-   tablerH   r>   r?   rA   stmtpk1s           r&   _upsertrL   e   s     1%=D+t++Hj.GH!!!$++SWWcN;4>>	,CD Kr7   c                     | j                  d       	 t        j                  | ||       | j                  d       y # | j                  d       w xY w)NzSET foreign_key_checks = 0zSET foreign_key_checks = 1)r+   r	   call_original)
connectionr-   metadatas      r&   _delete_from_all_tablesrQ   y   sH    ;<A,,ZhG""#?@
""#?@s	   < Ac                 B     t         j                   fd       } |       S )Nc               3   Z  K   t        j                  j                  d      d        } 	 d  t        j                  j                  d|        j                  j	                          y # t        j                  j                  d|        j                  j	                          w xY ww)Nengine_connectc                 F    | j                  d       | j                          y )Nz%SET innodb_snapshot_isolation = 'OFF')r+   rollback)r0   s    r&   turn_off_snapshot_isolationzI_allow_stale_update_impl.<locals>.go.<locals>.turn_off_snapshot_isolation   s      !HIMMOr7   )r   listens_fordbremovedispose)rW   r-   s    r&   goz$_allow_stale_update_impl.<locals>.go   s     			366#3	4	 
5		LL!13NO FFNN LL!13NO FFNNs   'B+A+ <B++=B((B+)
contextlibcontextmanager)r-   r\   s   ` r&   _allow_stale_update_implr_      s$      4Kr7   )r]    r   r   testing.provisionr   r   r   r	   r
   r   r   r   for_dbr1   r6   r)   r=   rL   rQ   r_   r<   r7   r&   <module>rc      sE      8 3 * 7 ( 4 8 ' GY/$ 0$N '9%
 &
& 7I.6 /6
 #9 $9  3' 4' y)-u & w	2A 3A  	* +r7   