o
    Rc+                     @   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$   GD:\Flask\env\Lib\site-packages\sqlalchemy/testing/suite/test_dialect.pydefine_tables%   s   zExceptionTest.define_tablesc                 C   sz   t j .}| }|| jj ddd tt	j
|j| jj ddd |  W d    d S 1 s6w   Y  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_error.   s   

"z"ExceptionTest.test_integrity_errorc                 C   s   t j Q}z|ttd J  tjy3 } zt|}t|j	t|v s)J W Y d }~nd }~ww t
jr?t|ts>J nt|tsFJ W d    d S W d    d S 1 sYw   Y  d S )Nu   méil)r   r(   r)   r+   r   r   r   Z
DBAPIErrorstrorigr   Zpy2k
isinstance)r/   r0   errZ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_errorr2   r7   r$   r$   r$   r%   r      s    

r   c                   @   4   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}|r| 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_level]   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_leveli   s   z/IsolationLevelTest.test_default_isolation_levelc                 C   s   |   }tj -}| }t|| |j|d t| | |j	|j
 t| | W d    d S 1 s9w   Y  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_levelo   s   
"z3IsolationLevelTest.test_non_default_isolation_levelc              	   C   s   t t}|d }t|dgD ]Q}tj $}|j|d t|	 | |
 }|  t|	 | W d    n1 s?w   Y  tj }t|	 |d  W d    n1 s]w   Y  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)	r8   r9   r:   r=   __requires__rK   rM   rS   rU   r$   r$   r$   r%   r@   X   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   s   |  }|| jj ddd |  t|t| jjj	j
|r$dnd  |   || jj  W d    d S 1 s@w   Y  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)r8   r9   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 I}||	 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 d	   d	S 1 sew   Y  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)r8   r9   r:   r
   rj   r$   r$   r$   r%   rd      s    rd   c                   @   r?   ) WeCanSetDefaultSchemaWEventsTestT)Zdefault_schema_name_switchc                 C   sL   t jjj}t }|  W d    n1 sw   Y  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   sx   t jjj}t }t|ddd }| }|j	|}t
|t j W d    n1 s.w   Y  t
|jj| d S )Nr)   c                 S      t t| tj d S rl   r   r   test_schemadbapi_connectionZconnection_recordr$   r$   r%   
on_connect     zMWeCanSetDefaultSchemaWEventsTest.test_wont_work_wo_insert.<locals>.on_connect)r   r(   rL   rm   r   rn   r   listens_forr)   _get_default_schema_namer   rs   )r/   rm   ro   rv   r0   what_it_should_ber$   r$   r%   test_wont_work_wo_insert  s   



z9WeCanSetDefaultSchemaWEventsTest.test_wont_work_wo_insertc                 C   st   t  }tj|ddddd }| }|j|}t|tj	 W d    n1 s+w   Y  t|jj
tj	 d S )Nr)   Tr-   c                 S   rq   rl   rr   rt   r$   r$   r%   rv     rw   zRWeCanSetDefaultSchemaWEventsTest.test_schema_change_on_connect.<locals>.on_connect)r   rn   r   rx   r)   rL   ry   r   r   rs   rm   )r/   ro   rv   r0   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 }| (}| }|j|}t|t	j
 |  |j|}t|t	j
 W d    n1 s?w   Y  t|jjt	j
 d S )Nr)   Tr|   c                 W   rq   rl   rr   )ru   argr$   r$   r%   rv   %  rw   z\WeCanSetDefaultSchemaWEventsTest.test_schema_change_works_w_transactions.<locals>.on_connect)r   rn   r   rx   r)   r*   rL   ry   r   r   rs   r.   rm   )r/   ro   rv   r0   r1   rz   r$   r$   r%   'test_schema_change_works_w_transactions"  s   

	zHWeCanSetDefaultSchemaWEventsTest.test_schema_change_works_w_transactionsN)	r8   r9   r:   r=   rV   rp   r{   r}   r   r$   r$   r$   r%   rk      s    	rk   c                   @   s   e Zd ZdS )&FutureWeCanSetDefaultSchemaWEventsTestN)r8   r9   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 )
Nre   r   T)r   r   F)Znullabler   z	some name)r   r   r   r   rf   r+   r-   valuesr   r[   rh   r   rZ   r   first_mapping)r/   r   rQ   r#   re   stmtrowr$   r$   r%   test_round_trip@  s   
"z'DifficultParametersTest.test_round_tripN)r8   r9   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TestBaser@   rW   rd   rk   ZFutureEngineMixinr   r   r$   r$   r$   r%   <module>   s:   ?>=!
C