U
    cc*                     @   st  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 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 G dd dejZG dd dejZG dd dejZG dd dejZG dd  d ejZG d!d" d"ejeZ G d#d$ d$ejZ!d%S )&   )testing   )assert_raises)config)engines)eq_)fixtures)ne_)provide_metadata)requirements) set_default_schema_on_connection)Column)Table   )	bindparam)event)exc)Integer)literal_column)select)String)compatc                   @   s:   e Zd ZdZdZdZedd Zej	dd Z
dd	 Zd
S )ExceptionTestzTest basic exception wrapping.

    DBAPIs vary a lot in exception behavior so to actually anticipate
    specific exceptions from real round trips, we need to be conservative.

    eachTc              	   C   s(   t d|tdtdddtdtd d S )N	manual_pkidTFprimary_keyZautoincrementdata2   r   r   r   r   clsmetadata r$   I/tmp/pip-unpacked-wheel-8u86ls_i/sqlalchemy/testing/suite/test_dialect.pydefine_tables%   s    zExceptionTest.define_tablesc              	   C   sd   t j P}| }|| jj ddd tt	j
|j| jj ddd |  W 5 Q R X d S )Nr   d1r   r   )r   dbconnectbeginexecutetablesr   insertr   r   ZIntegrityErrorrollback)selfconntransr$   r$   r%   test_integrity_error.   s    
 
z"ExceptionTest.test_integrity_errorc                 C   s   t j }z|ttd ds(tW nB tjk
rl } z"t	|}t	|j
t	|ks\tW 5 d }~X Y nX tjrt|t	stnt|t	stW 5 Q R X d S )Nu   méilF)r   r)   r*   r,   r   r   AssertionErrorr   Z
DBAPIErrorstrorigr   Zpy2k
isinstance)r0   r1   errerr_strr$   r$   r%   test_exception_with_non_asciiA   s    (z+ExceptionTest.test_exception_with_non_asciiN)__name__
__module____qualname____doc__run_deletes__backend__classmethodr&   r   Z$duplicate_key_raises_integrity_errorr3   r:   r$   r$   r$   r%   r      s   

r   c                   @   s4   e Zd ZdZdZdd Zdd Zdd Zd	d
 ZdS )IsolationLevelTestTZisolation_levelc                 C   sF   t t}|d }|d }t|d|g}|r8| S td d S )Ndefault	supported
AUTOCOMMITz(no non-default isolation level available)r   get_isolation_levelsr   set
differencepopZ	skip_test)r0   levelsrD   rE   sr$   r$   r%    _get_non_default_isolation_level]   s    
z3IsolationLevelTest._get_non_default_isolation_levelc                 C   s   t tjjjttd  d S )NrD   )r   r   r)   dialectZdefault_isolation_levelr   rG   )r0   r$   r$   r%   test_default_isolation_leveli   s    z/IsolationLevelTest.test_default_isolation_levelc              	   C   sj   |   }tj N}| }t|| |j|d t| | |j	|j
 t| | W 5 Q R X d S )NrC   )rM   r   r)   r*   get_isolation_levelr	   execution_optionsr   rN   reset_isolation_level
connection)r0   Znon_defaultr1   existingr$   r$   r%    test_non_default_isolation_levelo   s    
z3IsolationLevelTest.test_non_default_isolation_levelc              
   C   s   t t}|d }t|dgD ]z}tj >}|j|d t|	 | |
 }|  t|	 | W 5 Q R X tj }t|	 |d  W 5 Q R X q"d S )NrE   rF   rC   rD   )r   rG   r   rH   rI   r)   r*   rQ   r   rP   r+   r/   )r0   rK   Z
all_levelslevelr1   r2   r$   r$   r%   test_all_levels   s    
z"IsolationLevelTest.test_all_levelsN)	r;   r<   r=   r@   __requires__rM   rO   rU   rW   r$   r$   r$   r%   rB   X   s   rB   c                   @   sD   e Zd ZdZdZdZedd Zdd Zdd	 Z	d
d Z
dd ZdS )AutocommitIsolationTestr   )
autocommitTc              	   C   s,   t d|tdtdddtdtddd d S )	N
some_tabler   TFr   r   r   )Ztest_needs_acidr    r!   r$   r$   r%   r&      s    z%AutocommitIsolationTest.define_tablesc              	   C   sx   |  }|| jj ddd |  t|t| jjj	j
|rHdnd  |   || jj  W 5 Q R X d S )Nr   z	some datar(   )r+   r,   r-   r[   r.   r/   r   scalarr   cr   delete)r0   r1   rZ   r2   r$   r$   r%   _test_conn_autocommits   s    
 

z.AutocommitIsolationTest._test_conn_autocommitsc                 C   s:   |}|j dd}| |d |j|j | |d d S )NrF   rC   TF)rQ   r_   rN   rR   rS   )r0   connection_no_transr1   c2r$   r$   r%   test_autocommit_on   s
    z*AutocommitIsolationTest.test_autocommit_onc                 C   s   |}|  |d d S )NF)r_   r0   r`   r1   r$   r$   r%   test_autocommit_off   s    z+AutocommitIsolationTest.test_autocommit_offc                 C   sB   |}|j dd}| |d |j ttd d | |d d S )NrF   rC   TrD   F)rQ   r_   r   rG   r   rc   r$   r$   r%   .test_turn_autocommit_off_via_default_iso_level   s    zFAutocommitIsolationTest.test_turn_autocommit_off_via_default_iso_levelN)r;   r<   r=   r?   rX   r@   rA   r&   r_   rb   rd   re   r$   r$   r$   r%   rY      s   
		rY   c                   @   s   e Zd Zedd ZdS )EscapingTestc              	   C   s   | j }td|tdtd}|tj tj }||	 t
dd ||	 t
dd t|t|jj|jjtdkd t|t|jj|jjtdkd W 5 Q R X d	S )
z|test that the DBAPI accommodates for escaped / nonescaped
        percent signs in a way that matches the compiler

        tr   r   zsome % value)r   zsome %% other valuez'some % value'z'some %% other value'N)r#   r   r   r   creater   r)   r+   r,   r.   dictr   r\   r   r]   r   wherer   )r0   mrg   r1   r$   r$   r%   test_percent_sign_round_trip   s,    	z)EscapingTest.test_percent_sign_round_tripN)r;   r<   r=   r
   rl   r$   r$   r$   r%   rf      s   rf   c                   @   s4   e Zd ZdZdZdd Zdd Zdd Zd	d
 ZdS ) WeCanSetDefaultSchemaWEventsTestT)Zdefault_schema_name_switchc              	   C   s8   t jjj}t }|  W 5 Q R X t|jj| d S N)r   r)   rN   default_schema_namer   testing_enginer*   r   )r0   ro   engr$   r$   r%   test_control_case   s
    


z2WeCanSetDefaultSchemaWEventsTest.test_control_casec              	   C   sd   t jjj}t }t|ddd }| }|j	|}t
|t j W 5 Q R X t
|jj| d S )Nr*   c                 S   s   t t| tj d S rn   r   r   test_schemadbapi_connectionZconnection_recordr$   r$   r%   
on_connect  s
      zMWeCanSetDefaultSchemaWEventsTest.test_wont_work_wo_insert.<locals>.on_connect)r   r)   rN   ro   r   rp   r   listens_forr*   _get_default_schema_namer   rt   )r0   ro   rq   rw   r1   what_it_should_ber$   r$   r%   test_wont_work_wo_insert  s    



z9WeCanSetDefaultSchemaWEventsTest.test_wont_work_wo_insertc              	   C   s`   t  }tj|ddddd }| }|j|}t|tj	 W 5 Q R X t|jj
tj	 d S )Nr*   Tr.   c                 S   s   t t| tj d S rn   rs   ru   r$   r$   r%   rw     s
      zRWeCanSetDefaultSchemaWEventsTest.test_schema_change_on_connect.<locals>.on_connect)r   rp   r   rx   r*   rN   ry   r   r   rt   ro   )r0   rq   rw   r1   rz   r$   r$   r%   test_schema_change_on_connect  s    

z>WeCanSetDefaultSchemaWEventsTest.test_schema_change_on_connectc              	   C   s   t  }tj|ddddd }| F}| }|j|}t|t	j
 |  |j|}t|t	j
 W 5 Q R X t|jjt	j
 d S )Nr*   Tr|   c                 W   s   t t| tj d S rn   rs   )rv   argr$   r$   r%   rw   %  s
      z\WeCanSetDefaultSchemaWEventsTest.test_schema_change_works_w_transactions.<locals>.on_connect)r   rp   r   rx   r*   r+   rN   ry   r   r   rt   r/   ro   )r0   rq   rw   r1   r2   rz   r$   r$   r%   'test_schema_change_works_w_transactions"  s    

zHWeCanSetDefaultSchemaWEventsTest.test_schema_change_works_w_transactionsN)	r;   r<   r=   r@   rX   rr   r{   r}   r   r$   r$   r$   r%   rm      s   	rm   c                   @   s   e Zd ZdS )&FutureWeCanSetDefaultSchemaWEventsTestN)r;   r<   r=   r$   r$   r$   r%   r   7  s   r   c                   @   s>   e Zd ZdZejdddddddd	d
dddddddd ZdS )DifficultParametersTestT)Zboring)zper cent)z
per % cent)z%percent)zpar(ens))zpercent%(ens)yah)zcol:ons)zmore :: %colons%)z	/slashes/)zmore/slashes)zq?marks)Z1param)z1col:onname)argnamesc              	   C   s   t d|tdtddt|tddd}|| || dd|d	i t|j	| 
|j	| d	k}t||d	 t|j	| 
|j	| t|k}|||d	i }t|j| d	 d S )
Nrg   r   T)r   r   F)Znullabler   z	some name)r   r   r   r   rh   r,   r.   valuesr   r]   rj   r   r\   r   first_mapping)r0   r   rS   r#   rg   Zstmtrowr$   r$   r%   test_round_trip@  s    
"z'DifficultParametersTest.test_round_tripN)r;   r<   r=   r@   r   combinationsr   r$   r$   r$   r%   r   =  s$   r   N)" r   r   r   r   r   r   r	   r
   r   Z	provisionr   Zschemar   r   r   r   r   r   r   r   r   utilr   Z
TablesTestr   ZTestBaserB   rY   rf   rm   ZFutureEngineMixinr   r   r$   r$   r$   r%   <module>   s:   ?>=!C
 