o
    y¬´\Ü  ã                   @   sâ   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dS )é   )Úassert_raises)Úconfig)Úeq_)Úfixtures)Úprovide_metadata)Úrequirements)ÚColumn)ÚTableé   )Ú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 )ÚExceptionTestz¶Test 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_keyÚautoincrementÚdataé2   ©r	   r   r   r   ©ÚclsÚmetadata© r   úW/var/www/html/env/lib/python3.10/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 )Né   Úd1©r   r   )r   ÚdbÚconnectÚbeginÚexecuteÚtablesr   Úinsertr   r   ÚIntegrityErrorÚrollback)ÚselfÚconnÚtransr   r   r   Útest_integrity_error(   s   ÿ
ü
"òz"ExceptionTest.test_integrity_errorc                 C   sÂ   t j ¡ �R}z| ttdƒgƒ¡ J ‚ tjy4 } 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ƒsGJ ‚W d   ƒ d S W d   ƒ d S 1 sZw   Y  d S )Nu   mÃ©il)r   r$   r%   r'   r   r   r   Ú
DBAPIErrorÚstrÚorigr   Úpy2kÚ
isinstance)r,   r-   ÚerrÚerr_strr   r   r   Útest_exception_with_non_ascii;   s   "€ýí"ïz+ExceptionTest.test_exception_with_non_asciiN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úrun_deletesÚ__backend__Úclassmethodr    r   Ú$duplicate_key_raises_integrity_errorr/   r7   r   r   r   r   r      s    

r   c                   @   s<   e Zd ZdZdZdZedd„ ƒZdd„ Zdd	„ Z	d
d„ Z
dS )ÚAutocommitTestr   )Ú
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   )Útest_needs_acidr   r   r   r   r   r    Z   s   
ûzAutocommitTest.define_tablesc                 C   sf   |  ¡ }| | jj ¡ dddœ¡ | ¡  t| t| jjj	j
gƒ¡|r%dnd ƒ | | jj ¡ ¡ d S )Nr!   z	some datar#   )r&   r'   r(   rB   r)   r+   r   Úscalarr   Úcr   Údelete)r,   r-   rA   r.   r   r   r   Ú_test_conn_autocommitsd   s   ÿ
þz%AutocommitTest._test_conn_autocommitsc                 C   s:   t j ¡ }|jdd�}|  |d¡ | ¡  |  |d¡ d S )NÚ
AUTOCOMMIT)Úisolation_levelTF)r   r$   r%   Úexecution_optionsrG   Ú
invalidate)r,   r-   Úc2r   r   r   Útest_autocommit_onr   s
   
z!AutocommitTest.test_autocommit_onc                 C   s   t j ¡ }|  |d¡ d S )NF)r   r$   r%   rG   )r,   r-   r   r   r   Útest_autocommit_offy   s   
z"AutocommitTest.test_autocommit_offN)r8   r9   r:   r<   Ú__requires__r=   r>   r    rG   rM   rN   r   r   r   r   r@   R   s    
	r@   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 ¡ �K}| | 	¡ t
dd�¡ | | 	¡ t
dd�¡ t| t|jjgƒ |jjtdƒk¡¡dƒ t| t|jjgƒ |jjtdƒk¡¡dƒ W d	  ƒ d	S 1 sgw   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   rD   r   rE   r   Úwherer   )r,   ÚmrQ   r-   r   r   r   Útest_percent_sign_round_trip   s.   ÿÿú	ÿÿú"óz)EscapingTest.test_percent_sign_round_tripN)r8   r9   r:   r   rV   r   r   r   r   rP   ~   s    rP   N)Ú r   r   r   r   r   r   Úschemar   r	   r   r   r   r   r   Úutilr   Ú
TablesTestr   r@   ÚTestBaserP   r   r   r   r   Ú<module>   s"   ?,