U
    r\ja3                     @   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$   \/root/pica-gateway/venv/lib/python3.8/site-packages/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   Zd1r   r   )r   dbconnectbeginexecutetablesr   insertr   r   ZIntegrityErrorrollback)selfconntransr$   r$   r%   test_integrity_error4   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)r/   r0   errZerr_strr$   r$   r%   test_exception_with_non_asciiG   s    (z+ExceptionTest.test_exception_with_non_asciiN)__name__
__module____qualname____doc__run_deletes__backend__classmethodr&   r   Z$duplicate_key_raises_integrity_errorr2   r8   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)r/   levelsrB   rC   sr$   r$   r%    _get_non_default_isolation_levelc   s    
z3IsolationLevelTest._get_non_default_isolation_levelc                 C   s   t tjjjttd  d S )NrB   )r   r   r(   dialectZdefault_isolation_levelr   rE   )r/   r$   r$   r%   test_default_isolation_levelo   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 )NrA   )rK   r   r(   r)   get_isolation_levelr	   execution_optionsr   rL   reset_isolation_level
connection)r/   Znon_defaultr0   existingr$   r$   r%    test_non_default_isolation_levelu   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 )NrC   rD   rA   rB   )r   rE   r   rF   rG   r(   r)   rO   r   rN   r*   r.   )r/   rI   Z
all_levelslevelr0   r1   r$   r$   r%   test_all_levels   s    
z"IsolationLevelTest.test_all_levelsN)	r9   r:   r;   r>   __requires__rK   rM   rS   rU   r$   r$   r$   r%   r@   ^   s   r@   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,   rY   r-   r.   r   scalarr   cr   delete)r/   r0   rX   r1   r$   r$   r%   _test_conn_autocommits   s    
 

z.AutocommitIsolationTest._test_conn_autocommitsc                 C   s:   |}|j dd}| |d |j|j | |d d S )NrD   rA   TF)rO   r]   rL   rP   rQ   )r/   connection_no_transr0   c2r$   r$   r%   test_autocommit_on   s
    z*AutocommitIsolationTest.test_autocommit_onc                 C   s   |}|  |d d S )NF)r]   r/   r^   r0   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 )NrD   rA   TrB   F)rO   r]   r   rE   r   ra   r$   r$   r%   .test_turn_autocommit_off_via_default_iso_level   s    zFAutocommitIsolationTest.test_turn_autocommit_off_via_default_iso_levelN)r9   r:   r;   r=   rV   r>   r?   r&   r]   r`   rb   rc   r$   r$   r$   r%   rW      s   
		rW   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   rZ   r   r[   r   wherer   )r/   mre   r0   r$   r$   r%   test_percent_sign_round_trip   s,    	z)EscapingTest.test_percent_sign_round_tripN)r9   r:   r;   r
   rj   r$   r$   r$   r%   rd      s   rd   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(   rL   default_schema_namer   testing_enginer)   r   )r/   rm   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 rl   r   r   test_schemadbapi_connectionZconnection_recordr$   r$   r%   
on_connect  s
      zMWeCanSetDefaultSchemaWEventsTest.test_wont_work_wo_insert.<locals>.on_connect)r   r(   rL   rm   r   rn   r   listens_forr)   _get_default_schema_namer   rr   )r/   rm   ro   ru   r0   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 rl   rq   rs   r$   r$   r%   ru     s
      zRWeCanSetDefaultSchemaWEventsTest.test_schema_change_on_connect.<locals>.on_connect)r   rn   r   rv   r)   rL   rw   r   r   rr   rm   )r/   ro   ru   r0   rx   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)   Trz   c                 W   s   t t| tj d S rl   rq   )rt   argr$   r$   r%   ru   +  s
      z\WeCanSetDefaultSchemaWEventsTest.test_schema_change_works_w_transactions.<locals>.on_connect)r   rn   r   rv   r)   r*   rL   rw   r   r   rr   r.   rm   )r/   ro   ru   r0   r1   rx   r$   r$   r%   'test_schema_change_works_w_transactions(  s    

zHWeCanSetDefaultSchemaWEventsTest.test_schema_change_works_w_transactionsN)	r9   r:   r;   r>   rV   rp   ry   r{   r}   r$   r$   r$   r%   rk      s   	rk   c                   @   s   e Zd ZdS )&FutureWeCanSetDefaultSchemaWEventsTestN)r9   r:   r;   r$   r$   r$   r%   r~   =  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ddddddZeejj	dd Z
ejdd Zedd Ze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_starts_with_underscore)zdot.s)zmore :: %colons%)_name)Z___name)z[BracketsAndCase])Z	42numbers)zpercent%signs)z
has spaces)z	/slashes/)zmore/slashes)zq?marks)Z1param)z1col:on	paramname)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	 t|j	| 
|j	| d	d
g}|| }d S )Nre   r   T)r   r   F)Znullabler   z	some namezsome other_name)r   r   r   r   rf   r+   r-   valuesr   r[   rh   r   rZ   r   first_mappingin_)r/   r   rQ   r#   namere   stmtrowr$   r$   r%   !test_round_trip_same_named_column_  s$    
"z9DifficultParametersTest.test_round_trip_same_named_columnc              
   c   sv   t d|tdttdtdtdtd}|| || dddd	d
ddd	dddd	dddd	g |V  d S )Nmytablemyidr   r   descr   aZa_desc)r   r   r   r   bZb_descr   r[   Zc_desc   dZd_desc)r   r   r   r   rf   r+   r-   )r/   r#   rQ   r   r$   r$   r%   multirow_fixture  s"    




	z(DifficultParametersTest.multirow_fixturec                 C   sD   |}t |jj|jjt|ddk}|||di}t|d d S )Nxvaluer[   r   )r   r[   r   rh   r   r   rZ   r   r/   r   rQ   r   Ztbl1r   resr$   r$   r%    test_standalone_bindparam_escape  s    z8DifficultParametersTest.test_standalone_bindparam_escapec                 C   s`   |}t |jj|jjt|ddgd|jj}|||ddgi	 }t
|ddg d S )Nr   r   r   r   r   r   )r   r[   r   rh   r   r   r   Zorder_byZscalarsallr   r   r$   r$   r%   *test_standalone_bindparam_escape_expanding  s    zBDifficultParametersTest.test_standalone_bindparam_escape_expandingN)r9   r:   r;   r>   r   combinationsZtough_parametersr   r   Zunusual_column_name_charactersr   Zfixturer   r   r   r$   r$   r$   r%   r   C  sD   &


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TestBaser@   rW   rd   rk   ZFutureEngineMixinr~   r   r$   r$   r$   r%   <module>	   s:   ?>=!C
 