U
    [h.                     @   s   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 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eZG dd dejZdZdS )    N   )testing   )config)fixtures)util)eq_)is_false)is_true)requirements)Table   )CheckConstraint)Column)ForeignKeyConstraint)Index)inspect)Integerschema)String)UniqueConstraintc                   @   s  e Zd ZdZdddZdd Zd ddZd	d
 Zej	e
jdd Zej	eje
jdd Zeje
jdd Zej	e
jdd Zeje
jdd Zeje
jdd Zeje
jdd Zeje
jdd Zeje
jdd Zeje
jdd ZdS )!TableDDLTestTNc              	   C   s*   t d| jtdtdddtdtd|dS )	N
test_tableidTFprimary_keyZautoincrementdata2   r   r   metadatar   r   r   )selfr    r"   G./venv/lib/python3.8/site-packages/sqlalchemy/testing/suite/test_ddl.py_simple_fixture"   s    zTableDDLTest._simple_fixturec              	   C   s&   t d| jtdtdddtdtdS )NZ_test_tabler   TFr   _datar   r   )r!   r"   r"   r#   _underscore_fixture+   s    z TableDDLTest._underscore_fixturec                 C   s"   | j |d}td|jj}||fS )Nr   
test_index)r$   r   cr   )r!   r   tableidxr"   r"   r#   _table_index_fixture3   s    z!TableDDLTest._table_index_fixturec              	   C   sJ   t j 6}|| d || }t| d W 5 Q R X d S )N)r   z	some data)	r   dbZbeginexecuteinsertvaluesZselectr   first)r!   r)   Zconnresultr"   r"   r#   _simple_roundtrip8   s    zTableDDLTest._simple_roundtripc                 C   s&   |   }|jtjdd | | d S NFZ
checkfirst)r$   creater   r,   r2   r!   r)   r"   r"   r#   test_create_table>   s    zTableDDLTest.test_create_tablec                 C   s,   | j tjd}|jtjdd | | d S )Nr   Fr4   )r$   r   Ztest_schemar5   r,   r2   r6   r"   r"   r#   test_create_table_schemaE   s    z%TableDDLTest.test_create_table_schemac                 C   s,   |   }|jtjdd |jtjdd d S r3   )r$   r5   r   r,   Zdropr6   r"   r"   r#   test_drop_tableM   s    zTableDDLTest.test_drop_tablec                 C   s&   |   }|jtjdd | | d S r3   )r&   r5   r   r,   r2   r6   r"   r"   r#   test_underscore_namesT   s    z"TableDDLTest.test_underscore_namesc                 C   sH   |   }|j|dd d|_|t| tt|dddi d S NFr4   z	a commentr   text)	r$   r5   commentr-   r   SetTableCommentr   r   get_table_commentr!   
connectionr)   r"   r"   r#   test_add_table_comment[   s    z#TableDDLTest.test_add_table_commentc                 C   sX   |   }|j|dd d|_|t| |t| tt|	ddd i d S r;   )
r$   r5   r=   r-   r   r>   ZDropTableCommentr   r   r?   r@   r"   r"   r#   test_drop_table_commentg   s     z$TableDDLTest.test_drop_table_commentc                 C   sF   |   }|tj|dd tt|d |tj|dd d S )NTZif_not_existsr   )r$   r-   r   CreateTabler
   r   	has_tabler@   r"   r"   r#   test_create_table_if_not_existss   s    z,TableDDLTest.test_create_table_if_not_existsc                 C   s   |   \}}|tj|dd tt|d tddd t|dD k |tj	|dd tddd t|dD k |tj	|dd d S )NTrD   r   r'   c                 S   s   g | ]}|d  qS namer"   .0ixr"   r"   r#   
<listcomp>   s   z@TableDDLTest.test_create_index_if_not_exists.<locals>.<listcomp>c                 S   s   g | ]}|d  qS rH   r"   rJ   r"   r"   r#   rM      s   )
r+   r-   r   rE   r
   r   rF   r	   get_indexesZCreateIndexr!   rA   r)   r*   r"   r"   r#   test_create_index_if_not_exists}   s&    z,TableDDLTest.test_create_index_if_not_existsc                 C   sb   |   }|| tt|d |tj|dd tt|d |tj|dd d S )Nr   TZ	if_exists)	r$   r5   r
   r   rF   r-   r   Z	DropTabler	   r@   r"   r"   r#   test_drop_table_if_exists   s    
z&TableDDLTest.test_drop_table_if_existsc                 C   s   |   \}}|| tddd t|dD k |tj|dd tddd t|dD k |tj|dd d S )Nr'   c                 S   s   g | ]}|d  qS rH   r"   rJ   r"   r"   r#   rM      s   z:TableDDLTest.test_drop_index_if_exists.<locals>.<listcomp>r   TrQ   c                 S   s   g | ]}|d  qS rH   r"   rJ   r"   r"   r#   rM      s   )	r+   r5   r
   r   rN   r-   r   Z	DropIndexr	   rO   r"   r"   r#   test_drop_index_if_exists   s$    
z&TableDDLTest.test_drop_index_if_exists)N)N)__name__
__module____qualname____backend__r$   r&   r+   r2   r   Zcreate_tabler   Zprovide_metadatar7   Zschemasr8   Z
drop_tabler9   r:   Zcomment_reflectionrB   rC   Ztable_ddl_if_existsrG   Zindex_ddl_if_existsrP   rR   rS   r"   r"   r"   r#   r      sH   
	


r   c                   @   s   e Zd ZdS )FutureTableDDLTestN)rT   rU   rV   r"   r"   r"   r#   rX      s   rX   c                   @   sr   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	e
jdddde
jj fde
jj fdddd ZdS )LongNameBlowoutTestzjtest the creation of a variety of DDL structures and ensure
    label length limits pass on backends

    Tc           	      C   s   ddd dd tdD  i}||_td|tdtd	d
d	d tdgdg}td|td|d	d |j}|| t	j
jjrt|}|d}|d d }||fS |d fS d S )NfkzGforeign_key_%(table_name)s_%(column_0_N_name)s_%(referred_table_name)s__c                 s   s&   | ]}d  dd tdD V  qdS ) c                 s   s   | ]}t d V  qdS ZabcdefNrandomchoicerK   jr"   r"   r#   	<genexpr>   s     z3LongNameBlowoutTest.fk.<locals>.<genexpr>.<genexpr>   NjoinrangerK   ir"   r"   r#   rc      s   z)LongNameBlowoutTest.fk.<locals>.<genexpr>
   a_things_with_stuffid_long_column_nameTr   )Ztest_needs_fkZaidz'a_things_with_stuff.id_long_column_nameZb_related_things_of_valuer   rI   )rf   rg   naming_conventionr   r   r   r   rI   
create_allr   requiresZ&foreign_key_constraint_name_reflectionenabledr   Zget_foreign_keys)	r!   r    rA   
conventionconsactual_nameinspZfksreflected_namer"   r"   r#   rZ      sF     
 	


zLongNameBlowoutTest.fkc           
   	   C   s   ddd dd tdD  i}||_td|tdtd	d
tdtd	d
}|j}|j}|| t	|}|
d}|d }	||	fS )Npkz.primary_key_%(table_name)s_%(column_0_N_name)sr[   c                 s   s&   | ]}d  dd tdD V  qdS )r\   c                 s   s   | ]}t d V  qdS r]   r^   ra   r"   r"   r#   rc     s     z3LongNameBlowoutTest.pk.<locals>.<genexpr>.<genexpr>   Nre   rh   r"   r"   r#   rc     s   z)LongNameBlowoutTest.pk.<locals>.<genexpr>rj   rk   rl   Trm   id_another_long_namerI   )rf   rg   rn   r   r   r   r   rI   ro   r   Zget_pk_constraint)
r!   r    rA   rr   ars   rt   ru   rw   rv   r"   r"   r#   rw      s*     



zLongNameBlowoutTest.pkc           
      C   s   ddd dd tdD  i}||_td|tdtd	d
tdt}td |jj|jj	}|j
}|| t|}|d}|d d }	||	fS )NrL   z(index_%(table_name)s_%(column_0_N_name)sr[   c                 s   s&   | ]}d  dd tdD V  qdS )r\   c                 s   s   | ]}t d V  qdS r]   r^   ra   r"   r"   r#   rc     s     z3LongNameBlowoutTest.ix.<locals>.<genexpr>.<genexpr>rx   Nre   rh   r"   r"   r#   rc     s   z)LongNameBlowoutTest.ix.<locals>.<genexpr>rj   rk   rl   Trm   ry   r   rI   )rf   rg   rn   r   r   r   r   r(   rl   ry   rI   ro   r   rN   )
r!   r    rA   rr   rz   rs   rt   ru   rL   rv   r"   r"   r#   rL     s*     



zLongNameBlowoutTest.ixc           	      C   s   ddd dd tdD  i}||_tdd}td	|tdtd
dtdt| |j}|| t	|}|
d	}|d d }||fS )Nuqz4unique_constraint_%(table_name)s_%(column_0_N_name)sr[   c                 s   s&   | ]}d  dd tdD V  qdS )r\   c                 s   s   | ]}t d V  qdS r]   r^   ra   r"   r"   r#   rc   ;  s     z3LongNameBlowoutTest.uq.<locals>.<genexpr>.<genexpr>rx   Nre   rh   r"   r"   r#   rc   :  s   z)LongNameBlowoutTest.uq.<locals>.<genexpr>rj   rl   ry   rk   Trm   r   rI   )rf   rg   rn   r   r   r   r   rI   ro   r   Zget_unique_constraints)	r!   r    rA   rr   rs   rt   ru   r{   rv   r"   r"   r#   r{   5  s,     




zLongNameBlowoutTest.uqc           	      C   s   ddd dd tdD  i}||_td}td|td	td
dtdt| |j}|| t	|}|
d}|d d }||fS )Nckzcheck_constraint_%(table_name)sr[   c                 s   s&   | ]}d  dd tdD V  qdS )r\   c                 s   s   | ]}t d V  qdS r]   r^   ra   r"   r"   r#   rc   W  s     z3LongNameBlowoutTest.ck.<locals>.<genexpr>.<genexpr>rx   Nre   rh   r"   r"   r#   rc   V  s   z)LongNameBlowoutTest.ck.<locals>.<genexpr>rj   zsome_long_column_name > 5rk   rl   Trm   Zsome_long_column_namer   rI   )rf   rg   rn   r   r   r   r   rI   ro   r   Zget_check_constraints)	r!   r    rA   rr   rs   rt   ru   r|   rv   r"   r"   r#   r|   R  s,     
	

zLongNameBlowoutTest.ck)rZ   )rw   )rL   r|   r{   type_)Zargnamesc                 C   s~   t | |||\}}t|dks$t|d k	rz|dt| }t|t|k rpt|dd |dt|d   n
t|| d S )N   r      )getattrlenAssertionErrorr   )r!   r}   r    rA   rt   rv   Zoverlapr"   r"   r#   test_long_convention_namen  s    	 $z-LongNameBlowoutTest.test_long_convention_nameN)rT   rU   rV   __doc__rW   rZ   rw   rL   r{   r|   r   combinationsrp   Zcheck_constraint_reflectionZas_skipsZunique_constraint_reflectionr   r"   r"   r"   r#   rY      s    .rY   )r   rX   rY   )r_   r\   r   r   r   r   Z
assertionsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   ZTestBaser   ZFutureEngineMixinrX   rY   __all__r"   r"   r"   r#   <module>	   s0    % ?