U
    ÌZjã  ã                   @   s  d dl Z d dlZ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 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\Z$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+ƒZ-G d+d,„ d,e	j&ƒZ.G d-d.„ d.e	j/ƒZ0G d/d0„ d0e	j&ƒZ1G d1d2„ d2e	j&ƒZ2d3Z3dS )4é    Né   )Úconfig)Úengines)Úeq_)Úexpect_warnings)Úfixtures)Úis_)Úget_temp_table_name)Útemp_table_keyword_args©ÚColumn)ÚTableé   )Úevent)Ú
ForeignKey)Úfunc)ÚIdentity)Úinspect)ÚInteger)ÚMetaData)ÚString)Útesting)Útypes)ÚDDL)ÚIndex)Úquoted_name)ÚBLANK_SCHEMA)Úis_false)Úis_true)NNc                   @   s4   e Zd ZdZedd„ ƒZdd„ Zejj	dd„ ƒZ
dS )	ÚHasTableTestTc                 C   sX   t d|tdtdd�tdtdƒƒƒ tjjjrTt d|tdtdd�tdtdƒƒtj	d� d S )	NÚ
test_tableÚidT©Úprimary_keyÚdataé2   Útest_table_s©Úschema)
r   r   r   r   r   ÚrequiresÚschemasÚenabledr   Útest_schema©ÚclsÚmetadata© r0   úk/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/sqlalchemy/testing/suite/test_reflection.pyÚdefine_tables'   s    ü
ûzHasTableTest.define_tablesc              	   C   sV   t j ¡ �B}tt jj |d¡ƒ tt jj |d¡ƒ tt jj |d¡ƒ W 5 Q R X d S )Nr    r&   Únonexistent_table)r   ÚdbÚbeginr   ÚdialectÚ	has_tabler   ©ÚselfÚconnr0   r0   r1   Útest_has_table8   s    zHasTableTest.test_has_tablec              	   C   sh   t j ¡ �T}tt jjj|dt jd�ƒ tt jjj|dt jd�ƒ tt jjj|dt jd�ƒ W 5 Q R X d S )Nr    r'   r&   r3   )r   r4   r5   r   r6   r7   r,   r   r8   r0   r0   r1   Útest_has_table_schema>   s,      ÿÿ  ÿÿ  ÿÿz"HasTableTest.test_has_table_schemaN)Ú__name__Ú
__module__Ú__qualname__Ú__backend__Úclassmethodr2   r;   r   r)   r*   r<   r0   r0   r0   r1   r   $   s   
r   c                   @   s4   e Zd ZdZedd„ ƒZdd„ Zejj	dd„ ƒZ
dS )	ÚHasIndexTestTc                 C   st   t d|tdtdd�tdtdƒƒƒ}td|jjƒ tjj	j
rpt d|tdtdd�tdtdƒƒtjd�}td	|jjƒ d S )
Nr    r!   Tr"   r$   r%   Úmy_idxr'   Úmy_idx_s)r   r   r   r   r   Úcr$   r   r)   r*   r+   r   r,   )r.   r/   Úttr0   r0   r1   r2   U   s     ü
ûzHasIndexTest.define_tablesc              	   C   sr   t j ¡ �^}t jj |dd¡s"t‚t jj |dd¡r8t‚t jj |dd¡rNt‚t jj |dd¡rdt‚W 5 Q R X d S )Nr    rC   rD   r3   Znonexistent_idx)r   r4   r5   r6   Ú	has_indexÚAssertionErrorr8   r0   r0   r1   Útest_has_indexi   s"      ÿ  ÿ  ÿzHasIndexTest.test_has_indexc              	   C   sŠ   t j ¡ �v}t jjj|ddt jd�s(t‚t jjj|ddt jd�rDt‚t jjj|ddt jd�r`t‚t jjj|ddt jd�r|t‚W 5 Q R X d S )Nr    rD   r'   rC   r3   Znonexistent_idx_s)r   r4   r5   r6   rG   r,   rH   r8   r0   r0   r1   Útest_has_index_schemav   s2       ÿ
   ÿ
ü
üz"HasIndexTest.test_has_index_schemaN)r=   r>   r?   r@   rA   r2   rI   r   r)   r*   rJ   r0   r0   r0   r1   rB   R   s   
rB   c                   @   s´   e Zd ZdZdZedd„ ƒZdd„ Zedd„ ƒZee	j
jd	d
„ ƒƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZee	j
jdd„ ƒƒZee	j
jdd„ ƒƒZee	j
jdd„ ƒƒZdS )ÚQuotedNameArgumentTestÚonceTc                 C   s´  t d|tdtƒtdtdƒƒtdtdƒƒtdtƒtjddd�t d	d¡tjdd
d�tjdgdgdd�tj	ddd�ddd� t
jjjrút d|tdtƒtdtdƒƒtdtdƒƒtdtƒtjddd�t dd¡tjddd�tjdgdgdd�tj	ddd�ddd� t d|tdtdd�tdtƒdd� t
jjj�r°t
jjj�r>ddg}ndg}|D ]f}dtjjj d| ¡tjjj |¡f }t |dt|ƒ¡ t |dtd tjjj d| ¡ ƒ¡ �qHd S )!Núquote ' oner!   Únamer%   r$   Z
related_idzpk quote ' one©rN   zix quote ' onezuq quote' onez
related.idzfk quote ' onezname != 'foo'zck quote ' onezquote ' one commentT)ÚcommentÚtest_needs_fkúquote " twozpk quote " twozix quote " twozuq quote" twozfk quote " twozck quote " two zquote " two commentÚrelatedr"   ©rQ   ú"CREATE VIEW %s AS SELECT * FROM %súview %sÚafter_createÚbefore_dropúDROP VIEW %s)r   r   r   r   ÚsaÚPrimaryKeyConstraintr   ÚUniqueConstraintÚForeignKeyConstraintÚCheckConstraintr   r)   Úsymbol_names_w_double_quoter+   Úview_column_reflectionr   r4   r6   Zidentifier_preparerÚquoter   Úlistenr   )r.   r/   ÚnamesrN   Úqueryr0   r0   r1   r2   ‘   sœ    
þ  ÿî

þ  ÿîûþÿ
ÿü
ÿÿÿýz$QuotedNameArgumentTest.define_tablesc                 C   s   t  ddt jjf¡| ƒS )N)rM   rR   )r   Úcombinationsr)   r_   )Úfnr0   r0   r1   Úquote_fixtureså   s    
þýz%QuotedNameArgumentTest.quote_fixturesc                 C   s   t tjƒ}| |¡ d S ©N)r   r   r4   Zget_table_options©r9   rN   Úinspr0   r0   r1   Útest_get_table_optionsë   s    
z-QuotedNameArgumentTest.test_get_table_optionsc                 C   s    t tjƒ}| d| ¡st‚d S )NrV   )r   r   r4   Úget_view_definitionrH   ri   r0   r0   r1   Útest_get_view_definitionñ   s    
z/QuotedNameArgumentTest.test_get_view_definitionc                 C   s   t tjƒ}| |¡st‚d S rh   )r   r   r4   Úget_columnsrH   ri   r0   r0   r1   Útest_get_columns÷   s    
z'QuotedNameArgumentTest.test_get_columnsc                 C   s   t tjƒ}| |¡st‚d S rh   )r   r   r4   Úget_pk_constraintrH   ri   r0   r0   r1   Útest_get_pk_constraintü   s    
z-QuotedNameArgumentTest.test_get_pk_constraintc                 C   s   t tjƒ}| |¡st‚d S rh   )r   r   r4   Úget_foreign_keysrH   ri   r0   r0   r1   Útest_get_foreign_keys  s    
z,QuotedNameArgumentTest.test_get_foreign_keysc                 C   s   t tjƒ}| |¡st‚d S rh   )r   r   r4   Úget_indexesrH   ri   r0   r0   r1   Útest_get_indexes  s    
z'QuotedNameArgumentTest.test_get_indexesc                 C   s   t tjƒ}| |¡st‚d S rh   )r   r   r4   Úget_unique_constraintsrH   ri   r0   r0   r1   Útest_get_unique_constraints  s    
z2QuotedNameArgumentTest.test_get_unique_constraintsc                 C   s   t tjƒ}| |¡st‚d S rh   )r   r   r4   Úget_table_commentrH   ri   r0   r0   r1   Útest_get_table_comment  s    
z-QuotedNameArgumentTest.test_get_table_commentc                 C   s   t tjƒ}| |¡st‚d S rh   )r   r   r4   Úget_check_constraintsrH   ri   r0   r0   r1   Útest_get_check_constraints  s    
z1QuotedNameArgumentTest.test_get_check_constraintsN)r=   r>   r?   Zrun_create_tablesr@   rA   r2   rg   rk   r   r)   r`   rm   ro   rq   rs   ru   Úunique_constraint_reflectionrw   Úcomment_reflectionry   Úcheck_constraint_reflectionr{   r0   r0   r0   r1   rK   �   s6   
S




rK   c                   @   s6  e Zd Zd ZZdZedd„ ƒZedd„ ƒZedd„ ƒZ	ed	d
„ ƒZ
edd„ ƒZedd„ ƒZejjdd„ ƒZejjdd„ ƒZejjdd„ ƒZejjdd„ ƒZejjejdddddejjfddddddejjfdddddejjfdd�dd„ ƒƒZejjd d!„ ƒZejjejjejjd"d#„ ƒƒƒZejjd$d%„ ƒZejjejjd&d'„ ƒƒZdTd(d)„Z ejd*ddejjfddejjfddejjejj fd+d�d,d-„ ƒZ!ejj"d.d/„ ƒZ#ejj"ejj$ejjd0d1„ ƒƒƒZ%ejd2dejjfd3d�ejj&d4d5„ ƒƒZ'ejd2dejjfd3d�ejjd6d7„ ƒƒZ(ejj)ejjd8d9„ ƒƒZ*d:d;„ Z+ejd2dejjfd3d�d<d=„ ƒZ,ejd>d?d@d�ejj-ejj.dAdB„ ƒƒƒZ/ejj"ejj0dCdD„ ƒƒZ1ejj2dEdF„ ƒZ3ejdejjfd2d3d�ejj0dGdH„ ƒƒZ4ejjejd2dejjfd3d�dIdJ„ ƒƒZ5ejdKdLdejjfdMd�e 6dNdO¡dPdQ„ ƒƒZ7ejj8dRdS„ ƒZ9dS )UÚComponentReflectionTestNTc                 C   s6   t jjjr,ddlm} tjt|j	dd�d�S t j
S d S )Nr   )ÚpoolÚclass)Z	poolclassÚscope)Úoptions)r   ÚrequirementsZindependent_connectionsr+   Ú
sqlalchemyr€   r   Útesting_engineÚdictZ
StaticPoolr4   )r.   r€   r0   r0   r1   Ú
setup_bind#  s    
ÿz"ComponentReflectionTest.setup_bindc                 C   s*   |   |d ¡ tjjjr&|   |tjj¡ d S rh   )Údefine_reflected_tablesr   r)   r*   r+   r   r,   r-   r0   r0   r1   r2   .  s    
z%ComponentReflectionTest.define_tablesc                 C   s$  |r|d }nd}t jjjrztd|tdtjdd�tdt d¡d	d
�tdt 	d¡d	d
�tdtj
tjd| dd�ƒ|dd�}nBtd|tdtjdd�tdt d¡d	d
�tdt 	d¡d	d
�|dd�}td|tdtj
dd�tdtj
t d| ¡ƒtdt d¡ƒ|dd� td|tdtj
ƒtdtj
t |jj¡ƒtdt d¡ƒtjddd�|dd� td|tdtj
ddd�tdt d¡d d!�td"t d¡d#d!�|d$d%� t jjj�rX|d k�rêtd&|tdtj
dd�tdt d¡ƒtd'td(t jj ƒƒdtjjjd)� nntd*|tdtj
dd�td+td,tjjj ƒƒtdt d¡ƒ|dd� td-|tdtj
dd�tdt d¡ƒ|dd� t jjj�rì|  ||¡ |�sìtd.|td/t d¡ƒdd0�}td1|tdtj
dd�td/t d¡ƒdd0�}t jjj�rìtd2|jj ¡ ƒ td3|jj ¡ ƒ t jjj�r|  ||¡ |�s t jjj�r |  |¡ d S )4NÚ.Ú ÚusersÚuser_idTr"   Útest1é   F©ÚnullableÚtest2Úparent_user_idz%susers.user_idÚ
user_id_fkrO   ©r(   rQ   Ú
dingalingsÚdingaling_idÚ
address_idz%semail_addresses.address_idr$   é   Úemail_addressesÚremote_user_idZemail_addressé   Úemail_ad_pkÚcomment_testr!   ú
id comment)r#   rP   údata % comment)rP   Úd2ú)Comment types type speedily ' " \ '' Fun!úthe test % ' " \ table comment)r(   rP   Úlocal_tableÚ	remote_idz%s.remote_table_2.id)rQ   r(   Úremote_tableÚlocal_idz%s.local_table.idÚremote_table_2Únoncol_idx_test_nopkÚqrT   Únoncol_idx_test_pkÚnoncol_idx_nopkÚnoncol_idx_pk) r   r)   Úself_referential_foreign_keysr+   r   r   rZ   ÚINTZCHARÚFloatr   r   r   rE   r�   r[   Úcross_schema_fk_reflectionr   r,   r4   r6   Údefault_schema_nameÚindex_reflectionÚdefine_indexÚindexes_with_ascdescr   rª   Údescr`   Údefine_viewsÚtemp_table_reflectionÚdefine_temp_tables)r.   r/   r(   Zschema_prefixrŒ   r©   r«   r0   r0   r1   r‰   4  s
   

 ÿýòù
ýõ
  ÿöýõ

ÿþôÿÿþóú	üûz/ComponentReflectionTest.define_reflected_tablesc                 C   s²   t ttjƒ}tttjdtj ƒ}t||tdtjdd�tdt 	d¡ƒtdtjƒtj
ddtj d	�t d
d¡f|Ž}tjjjr®tjjjr®t |dtdtj ƒ¡ t |dtdƒ¡ d S )Núuser_tmp_%sr!   Tr"   rN   r%   Úfooúuser_tmp_uq_%srO   Úuser_tmp_ixrW   z=create temporary view user_tmp_v as select * from user_tmp_%srX   zdrop view user_tmp_v)r
   r   r4   r	   Úidentr   r   rZ   r¯   ÚVARCHARr\   r   r   r)   Úview_reflectionr+   Útemporary_viewsr   rb   r   )r.   r/   ÚkwÚ
table_nameÚuser_tmpr0   r0   r1   r¹   Ä  s>      ÿ

óòÿþÿÿýz*ComponentReflectionTest.define_temp_tablesc                 C   s2   t d|jj|jjƒ t d|jj|jj|jjƒ d S )NÚusers_t_idxÚusers_all_idx)r   rE   rŽ   r’   r�   )r.   r/   rŒ   r0   r0   r1   r´   è  s    z$ComponentReflectionTest.define_indexc                 C   s^   dD ]T}|}|rd||f }|d }d||f }t  |dt|ƒ¡ t  |dtd| ƒ¡ qd S )N)rŒ   rš   z%s.%sÚ_vrU   rW   rX   rY   )r   rb   r   )r.   r/   r(   rÃ   ÚfullnameZ	view_namerd   r0   r0   r1   r·   í  s    þ  
ÿz$ComponentReflectionTest.define_viewsc                 C   s$   t | jƒ}|  tjj| ¡ k¡ d S rh   )r   ÚbindÚassert_r   r   r,   Úget_schema_names©r9   rj   r0   r0   r1   Útest_get_schema_namesþ  s    
z-ComponentReflectionTest.test_get_schema_namesc                 C   s:   |j ddttjjid�}t|ƒ}|  tjj| ¡ k¡ dS )z
test #7300r»   Úbar)Zschema_translate_mapN)Zexecution_optionsr   r   r   r,   r   rÊ   rË   )r9   Ú
connectionrj   r0   r0   r1   Ú%test_get_schema_names_w_translate_map  s      þÿz=ComponentReflectionTest.test_get_schema_names_w_translate_mapc                 C   s$   t  ¡ }t|ƒ t|jdƒs t‚d S )Nr²   )r   r†   r   Úhasattrr6   rH   )r9   Úenginer0   r0   r1   Útest_dialect_initialize  s    z/ComponentReflectionTest.test_dialect_initializec                 C   s    t | jƒ}t|j| jjjƒ d S rh   )r   rÉ   r   r²   r6   rÌ   r0   r0   r1   Útest_get_default_schema_name  s    
z4ComponentReflectionTest.test_get_default_schema_name)NTFFF)Úforeign_keyTFF)NFTF)NTTFz/order_by,include_plain,include_views,use_schema©Úargnamesc                    sÈ   |rt j}nd }ddddddg‰ t|ƒ}|rT| |¡}| ¡  ddg}	tt|ƒ|	ƒ |rÄ|rrd	d
„ | |¡D ƒ}
n
| |¡}
‡ fdd
„|
D ƒ}|dkr¬dddg}	t||	ƒ ndddg}	tt|ƒ|	ƒ d S )Nrž   r«   r©   r¤   r¦   r¨   Úemail_addresses_vÚusers_vc                 S   s   g | ]}|d  r|d  ‘qS )r   r0   ©Ú.0Zrecr0   r0   r1   Ú
<listcomp>D  s   þz@ComponentReflectionTest.test_get_table_names.<locals>.<listcomp>c                    s   g | ]}|ˆ kr|‘qS r0   r0   ©rÛ   Út©Z_ignore_tablesr0   r1   rÜ   K  s      rÕ   rŒ   rš   r–   )	r   r,   r   Zget_view_namesÚsortr   ÚsortedZget_sorted_table_and_fkc_namesÚget_table_names)r9   rÏ   Zorder_byZinclude_plainZinclude_viewsÚ
use_schemar(   rj   Útable_namesZanswerÚtablesr0   rß   r1   Útest_get_table_names  s8    ú	
þ


z,ComponentReflectionTest.test_get_table_namesc                 C   s,   t | jƒ}| ¡ }tt|ƒdtj gƒ d S )Nrº   )r   rÉ   Zget_temp_table_namesr   rá   r   r¾   ©r9   rj   Útemp_table_namesr0   r0   r1   Útest_get_temp_table_namesT  s    
z1ComponentReflectionTest.test_get_temp_table_namesc                 C   s&   t | jƒ}| ¡ }tt|ƒdgƒ d S )NÚ
user_tmp_v)r   rÉ   Zget_temp_view_namesr   rá   rç   r0   r0   r1   Útest_get_temp_view_namesZ  s    
z0ComponentReflectionTest.test_get_temp_view_namesc                 C   s   |   ¡  d S rh   )Ú_test_get_comments©r9   r0   r0   r1   Útest_get_commentsb  s    z)ComponentReflectionTest.test_get_commentsc                 C   s   |   tjj¡ d S rh   )rì   r   r   r,   rí   r0   r0   r1   Útest_get_comments_with_schemaf  s    z5ComponentReflectionTest.test_get_comments_with_schemac                 C   st   t | jƒ}t|jd|d�ddiƒ t|jd|d�dd iƒ tdd„ |jd|d�D ƒdd	d
œddd
œddd
œgƒ d S )Nrž   r'   Útextr£   rŒ   c                 S   s   g | ]}|d  |d dœ‘qS )rN   rP   )rN   rP   r0   rÚ   r0   r0   r1   rÜ   v  s   ÿz>ComponentReflectionTest._test_get_comments.<locals>.<listcomp>rŸ   r!   )rP   rN   r    r$   r¢   r¡   )r   rÉ   r   rx   rn   )r9   r(   rj   r0   r0   r1   rì   k  s"    
þþüýûz*ComponentReflectionTest._test_get_comments)FFzuse_views,use_schemac                 C   sn  |rt j}nd }| jj| jj }}|r0ddg}nddg}t|ƒ}t|||fƒD �]\}	}
|}|j|	|d�}|  t	|ƒdkt	|ƒ¡ t
|
jƒD ]Ú\}}t|j|| d ƒ || d j}|j}t|tjjƒrÐ|j}t d	¡rð|tjtjfkrðtj}|  t	t|jƒ |j¡ tjtjtjtjtjtjtj g¡ƒdkd
|j|j|| d |f ¡ |j!sŒ|| d d ksŒt"‚qŒqNd S )NrÙ   rØ   rŒ   rš   r'   r   rN   ÚtypeÚoraclez%s(%s), %s(%s)Údefault)#r   r,   rå   rŒ   rš   r   Úziprn   rÊ   ÚlenÚ	enumerateÚcolumnsr   rN   Ú	__class__rñ   Ú
isinstancerZ   r   Z
TypeEnginer   ZagainstÚ	sql_typesÚDateÚDateTimeÚsetÚ__mro__Úintersectionr   ÚNumericZTimer   Z_Binaryr#   rH   )r9   rÏ   Z	use_viewsrã   r(   rŒ   Ú	addressesrä   rj   rÃ   ÚtableZschema_nameÚcolsÚiÚcolÚctypeZ	ctype_defr0   r0   r1   ro   †  s\    
þ
ÿùýÿñÿïz(ComponentReflectionTest.test_get_columnsc                 C   sv   t t| jdtj ƒ}| j| }t| jƒ}| |¡}|  t|ƒdkt|ƒ¡ t	|j
ƒD ]\}}t|j|| d ƒ qTd S )Nrº   r   rN   )r	   r   rÉ   r¾   rå   r   rn   rÊ   rõ   rö   r÷   r   rN   )r9   rÃ   rÄ   rj   r  r  r  r0   r0   r1   Útest_get_temp_table_columnsÐ  s      ÿ


z3ComponentReflectionTest.test_get_temp_table_columnsc                 C   s2   t | jƒ}| d¡}tdd„ |D ƒdddgƒ d S )Nrê   c                 S   s   g | ]}|d  ‘qS rO   r0   ©rÛ   r  r0   r0   r1   rÜ   ã  s     zFComponentReflectionTest.test_get_temp_view_columns.<locals>.<listcomp>r!   rN   r»   )r   rÉ   rn   r   )r9   rj   r  r0   r0   r1   Útest_get_temp_view_columnsÝ  s    

z2ComponentReflectionTest.test_get_temp_view_columns©Frã   c              	   C   sž   |rt jj}nd }| jj| jj }}t|ƒ}|j|j|d�}|d }t	|dgƒ |j|j|d�}	|	d }
t	|
dgƒ t j
j ¡ � t	|	d dƒ W 5 Q R X d S )Nr'   Úconstrained_columnsr�   r˜   rN   r�   )r   r   r,   rå   rŒ   rš   r   rp   rN   r   r)   Zreflects_pk_namesÚfail_if)r9   rÏ   rã   r(   rŒ   r  rj   Z
users_consZusers_pkeysZ	addr_consZ
addr_pkeysr0   r0   r1   rq   å  s    
z.ComponentReflectionTest.test_get_pk_constraintc              	   C   sB  |rt j}nd }| jj| jj }}t|ƒ}|}tjjj	r¾|j
|j|d�}|d }	tjj ¡ � t|	d dƒ W 5 Q R X t|	d |ƒ t|	d |jƒ t|	d dgƒ tjjj	r¾t|	d	 d
gƒ |j
|j|d�}
|
d }	tjj ¡ � |  |	d d k	¡ W 5 Q R X t|	d |ƒ t|	d |jƒ t|	d dgƒ t|	d	 dgƒ d S )Nr'   r   rN   r”   Úreferred_schemaÚreferred_tableÚreferred_columnsr�   r  r“   r›   )r   r,   rå   rŒ   rš   r   r   r)   r®   r+   rr   rN   Znamed_constraintsr  r   Zimplicitly_named_constraintsrÊ   )r9   rÏ   rã   r(   rŒ   r  rj   Zexpected_schemaZusers_fkeysÚfkey1Z
addr_fkeysr0   r0   r1   rs   ý  s0    

z-ComponentReflectionTest.test_get_foreign_keysc           	      C   s  |   d| jjj dtjj dtjj ¡\}}}t| jƒ}| |j	¡}t
t|ƒdƒ |d }t
|d tjjƒ t
|d |j	ƒ t
|d d	gƒ t
|d
 dgƒ |j|j	tjjd�}t
t|ƒdƒ |d }|d d | jjjfksàt‚t
|d |j	ƒ t
|d d	gƒ t
|d
 dgƒ d S )Nz%s.local_tablez%s.remote_tablez%s.remote_table_2é   r   r  r  r  r!   r  r¥   r'   r§   )rå   rÉ   r6   r²   r   r   r,   r   rr   rN   r   rõ   rH   )	r9   r¤   r¦   r¨   rj   Zlocal_fkeysr  Zremote_fkeysZfkey2r0   r0   r1   Ú"test_get_inter_schema_foreign_keys%  s4    

ý

 ÿþ
z:ComponentReflectionTest.test_get_inter_schema_foreign_keysc                 C   sZ   dd„ |D ƒ}|D ]B}|d |ks&t ‚|| |d ¡ }|D ]}t|| || ƒ q<qd S )Nc                 S   s   g | ]}|d  ‘qS rO   r0   )rÛ   Údr0   r0   r1   rÜ   I  s     z@ComponentReflectionTest._assert_insp_indexes.<locals>.<listcomp>rN   )rH   Úindexr   )r9   ÚindexesÚexpected_indexesZindex_namesZe_indexr  Úkeyr0   r0   r1   Ú_assert_insp_indexesH  s    z,ComponentReflectionTest._assert_insp_indexesc                 C   sZ   |rt j}nd }t| jƒ}|jd|d�}dddgddœddddgd	dœg}|  ||¡ d S )
NrŒ   r'   FrŽ   r’   rÅ   ©ÚuniqueÚcolumn_namesrN   r�   rÆ   )r   r,   r   rÉ   rt   r  )r9   rÏ   rã   r(   rj   r  r  r0   r0   r1   ru   P  s    
ýýúz(ComponentReflectionTest.test_get_indexes)r©   r¬   )r«   r­   ztname,ixnamec                 C   sz   t |ƒ}| |¡}d|dœg}|  ||¡ t|tƒ |d�}tt|jƒdƒ tt	|jƒd j
|ƒ tt	|jƒd j|ƒ d S )NF)r  rN   ©Úautoload_withr  r   )r   rt   r  r   r   r   rõ   r  r   Úlistr  rN   )r9   rÏ   ÚtnameZixnamerj   r  r  rÞ   r0   r0   r1   Útest_get_noncol_indexl  s    
z-ComponentReflectionTest.test_get_noncol_indexc                 C   sN   t | jƒ}| dtj ¡}|D ]}| dd ¡ qt|dgdtj dœgƒ d S )Nrº   Úduplicates_indexrN   r¼   )r  rN   )r   rÉ   rv   r   r¾   Úpopr   )r9   rj   Ú	reflectedÚreflr0   r0   r1   Ú&test_get_temp_table_unique_constraints‚  s    
þÿþz>ComponentReflectionTest.test_get_temp_table_unique_constraintsc                 C   s|   t | jƒ}tttjdtj ƒ}| |¡}|D ]}| dd ¡ q,ddgddœg}tj	j
jrdg |d d< td	d
„ |D ƒ|ƒ d S )Nrº   Údialect_optionsFr»   r½   r  r   Úinclude_columnsc                 S   s   g | ]}|d  dkr|‘qS )rN   r½   r0   ©rÛ   Úidxr0   r0   r1   rÜ   ¤  s      zGComponentReflectionTest.test_get_temp_table_indexes.<locals>.<listcomp>)r   rÉ   r	   r   r4   r¾   rt   r"  r   r)   Úindex_reflects_included_columnsr+   r   )r9   rj   rÃ   r  ÚindÚexpectedr0   r0   r1   Útest_get_temp_table_indexes•  s"    
  ÿ
ÿ
þz3ComponentReflectionTest.test_get_temp_table_indexesc                 C   sÆ  |rt j}nd }tddgdœddddgdœddddgdœdd	d
gdœddgdœddgdœgt d¡d�}td|tdt d¡ƒtdt d¡ƒtdtj	ƒtd	t d¡ƒtd
t d¡ƒ|d�}|D ]"}| 
tj|d d|d iŽ¡ q¼| |¡ t|ƒ}t|jd|d�t d¡d�}	tƒ }
t||	ƒD ]0\}}| dd ¡}|�rB|
 |¡ t||ƒ �qtƒ }td|||d�}	tdd„ |	jD ƒƒ}tdd„ |	jD ƒƒ dg¡}| |¡�r¦t‚|
�rÂt|
|ƒ t|tƒ ƒ d S )NZunique_aÚa)rN   r  Zunique_a_b_cÚbrE   Zunique_c_a_bZunique_asc_keyÚascr  zi.have.dotszi have spacesrN   ©r  Ztesttblrœ   r™   r'   r  r!  )r  r(   c                 S   s   g | ]
}|j ‘qS r0   rO   r(  r0   r0   r1   rÜ   ð  s     zGComponentReflectionTest.test_get_unique_constraints.<locals>.<listcomp>c                 S   s   g | ]}t |tjƒr|j‘qS r0   )rù   rZ   r\   rN   )rÛ   Zuqr0   r0   r1   rÜ   ò  s   þ)r   r,   rá   ÚoperatorÚ
itemgetterr   r   rZ   r   r   Zappend_constraintr\   Úcreater   rv   rý   rô   r"  Úaddr   r   r  ÚconstraintsÚ
differencerÿ   rH   )r9   r/   rÏ   rã   r(   Zuniquesr  ZucÚ	inspectorr#  Znames_that_duplicate_indexÚorigr$  ZdupeZreflected_metadataZ	idx_namesZuq_namesr0   r0   r1   rw   ¨  st    


ú÷
÷ÿ
þ
üþÿú
z3ComponentReflectionTest.test_get_unique_constraintsc           	      C   sT   |rt j}nd }d}d}t|ƒ}|j||d�}|  |¡ |j||d�}|  |¡ d S )NrÙ   rØ   r'   )r   r,   r   rl   rÊ   )	r9   rÏ   rã   r(   Z
view_name1Z
view_name2rj   Zv1Zv2r0   r0   r1   rm   þ  s    
z0ComponentReflectionTest.test_get_view_definition)rŒ   FrŒ   ztable_name,use_schemaÚ
postgresqlzPG specific featurec                 C   s8   |rt j}nd }t|ƒ}| ||¡}|  t|tƒ¡ d S rh   )r   r,   r   Zget_table_oidrÊ   rù   Úint)r9   rÏ   rÃ   rã   r(   rj   Úoidr0   r0   r1   Útest_get_table_oid  s    z*ComponentReflectionTest.test_get_table_oidc                 C   sH   t | jƒ}dD ]4\}}| |¡}dd„ |D ƒ| }| dd¡st‚qdS )aˆ  test that 'autoincrement' is reflected according to sqla's policy.

        Don't mark this test as unsupported for any backend !

        (technically it fails with MySQL InnoDB since "id" comes before "id2")

        A backend is better off not returning "autoincrement" at all,
        instead of potentially returning "False" for an auto-incrementing
        primary key column.

        ))rŒ   r�   )rš   r˜   )r–   r—   c                 S   s   i | ]}|d  |“qS rO   r0   ©rÛ   rE   r0   r0   r1   Ú
<dictcomp>5  s      zBComponentReflectionTest.test_autoincrement_col.<locals>.<dictcomp>ÚautoincrementTN)r   rÉ   rn   ÚgetrH   )r9   rj   r  Úcnamer  Zid_r0   r0   r1   Útest_autoincrement_col  s
    

z.ComponentReflectionTest.test_autoincrement_col)N):r=   r>   r?   Úrun_insertsÚrun_deletesr@   rA   rˆ   r2   r‰   r¹   r´   r·   r   r)   Zschema_reflectionrÍ   rÐ   rÓ   rÔ   Ú!foreign_key_constraint_reflectionre   r*   ræ   rè   ré   rÀ   rÁ   rë   r}   rî   rï   rì   ro   r¸   r  r`   r	  Ú!primary_key_constraint_reflectionrq   rs   r±   r  r  ru   r³   rµ   r   r|   r%  Ztemp_table_reflect_indexesr-  rw   rm   Zonly_onr=  Útable_reflectionrC  r0   r0   r0   r1   r     sø   



 
#





ø
,


ý÷
?
 
 ÿ 
 ÿ$! 
 ÿ
ý

  ÿR 
 ÿý
	r   c                   @   s�   e Zd ZdZdZejdd„ ƒZejdd„ ƒZej	j
dd„ ƒZej	j
d	d
„ ƒZej	j
dd„ ƒZej	jej	j
dd„ ƒƒZej	jej	j
dd„ ƒƒZdS )ÚTableNoColumnsTest)Úreflect_tables_no_columnsTc                 C   s   t d|ƒ | |¡ d S ©NÚempty)r   Ú
create_all©r9   rÏ   r/   r0   r0   r1   Útable_no_columns=  s    
z#TableNoColumnsTest.table_no_columnsc                 C   sP   t d|ƒ | |¡ t d|ƒ t |dtdƒ¡ t |dtdƒ¡ | |¡ d S )NrL  rW   z*CREATE VIEW empty_v AS SELECT * FROM emptyrX   zDROP VIEW IF EXISTS empty_v)r   rM  r   rb   r   rN  r0   r0   r1   Úview_no_columnsB  s    


ý  ÿz"TableNoColumnsTest.view_no_columnsc                 C   s$   t dtƒ |d�}tt|jƒg ƒ d S )NrL  r  ©r   r   r   r  rE   )r9   rÏ   rO  Út2r0   r0   r1   Útest_reflect_table_no_columnsU  s    z0TableNoColumnsTest.test_reflect_table_no_columnsc                 C   s   t t|ƒ d¡g ƒ d S rK  ©r   r   rn   )r9   rÏ   rO  r0   r0   r1   Ú!test_get_columns_table_no_columnsZ  s    z4TableNoColumnsTest.test_get_columns_table_no_columnsc                 C   s*   t ƒ }| |¡ t|jƒ dg¡s&t‚d S rK  )r   Úreflectrý   rå   rÿ   rH   )r9   rÏ   rO  Úmr0   r0   r1   Ú"test_reflect_incl_table_no_columns^  s    
z5TableNoColumnsTest.test_reflect_incl_table_no_columnsc                 C   s$   t dtƒ |d�}tt|jƒg ƒ d S )NÚempty_vr  rQ  )r9   rÏ   rP  rR  r0   r0   r1   Útest_reflect_view_no_columnsd  s    z/TableNoColumnsTest.test_reflect_view_no_columnsc                 C   s   t t|ƒ d¡g ƒ d S )NrY  rT  )r9   rÏ   rP  r0   r0   r1   Ú test_get_columns_view_no_columnsj  s    z3TableNoColumnsTest.test_get_columns_view_no_columnsN)r=   r>   r?   Ú__requires__r@   r   ZfixturerO  rP  r)   rJ  rS  rU  rX  ZviewsrZ  r[  r0   r0   r0   r1   rI  9  s$   




rI  c                
   @   sø   e Zd ZdZejdejjfddd�ejjdd„ ƒƒZ	ejj
dd„ ƒZejjd	d
„ ƒZdd„ Zejjdd„ ƒZejjdd„ ƒZejjdd„ ƒZejdddejjfdddejjfi ddejjfi ddejjfdddejjfdddejjfdd�dd„ ƒZdS )ÚComponentReflectionTestExtraTr
  rã   rÖ   c              	      s¦   |rt j}nd }td|tdtƒ ƒtjddd�tjddd�|d� | |¡ t|ƒ}t	|j
d|d�t d	¡d
�}dd„ ‰ ‡ fdd„|D ƒ}t|dddœdddœgƒ d S )NZsa_ccr.  za > 1 AND a < 5Zcc1rO   za = 1 OR (a > 2 AND a < 5)Z
UsesCasingr'   rN   r1  c                 S   s   d  t d|  ¡ tj¡¡S )Nú zand|\d|=|a|or|<|>)ÚjoinÚreÚfindallÚlowerÚI)Úsqltextr0   r0   r1   Ú	normalize”  s    ÿzJComponentReflectionTestExtra.test_get_check_constraints.<locals>.normalizec                    s"   g | ]}|d  ˆ |d ƒdœ‘qS )rN   rd  ©rN   rd  r0   )rÛ   Úitem©re  r0   r1   rÜ   ™  s   ÿzKComponentReflectionTestExtra.test_get_check_constraints.<locals>.<listcomp>za = 1 or a > 2 and a < 5rf  za > 1 and a < 5)r   r,   r   r   r   rZ   r^   rM  r   rá   rz   r2  r3  r   )r9   r/   rÏ   rã   r(   r8  r#  r0   rh  r1   r{   t  s<    
 ÿø
þ
þþþz7ComponentReflectionTestExtra.test_get_check_constraintsc              	   C   sÈ   t d|tdtdƒƒtdtdƒƒƒ}tdt |jj¡t |jj¡ƒ td|jjƒ | 	|¡ t
|ƒ}ddgddœg}tjjjr g |d	 d
< d|jj g i|d	 d< tdƒ� t| d¡|ƒ W 5 Q R X d S )NrÞ   Úxr™   ÚyÚt_idxZt_idx_2F)rN   r  r  r   r'  ú
%s_includer&  z>Skipped unsupported reflection of expression-based index t_idx)r   r   r   r   r   rb  rE   ri  rj  rM  r   r   r)   r*  r+   rÒ   rN   r   r   rt   )r9   r/   rÏ   rÞ   rj   r,  r0   r0   r1   Ú%test_reflect_expression_based_indexes¥  s0    ü 
ÿ

 ÿÿþzBComponentReflectionTestExtra.test_reflect_expression_based_indexesc                 C   s¾   t d|tdtdƒƒtdtdƒƒƒ}td|jjƒ}dg|j|jj d< | 	|¡ t
|ƒ}t| d¡ddgdgdd|jj dgid	œgƒ t dtƒ |d
�}tt|jƒd j|jj d dgƒ d S )NrÞ   ri  r™   rj  rk  ÚincludeFrl  )rN   r  r'  r  r&  r  r   )r   r   r   r   rE   ri  r&  rÒ   rN   rM  r   r   rt   r   r  r  )r9   r/   rÏ   rÞ   r)  rj   rR  r0   r0   r1   Útest_reflect_covering_indexÇ  s:    ü

 ÿûÿþÿüz8ComponentReflectionTestExtra.test_reflect_covering_indexc                 G   s@   t d|fdd„ t|ƒD ƒžŽ }| |¡ dd„ t|ƒ d¡D ƒS )NrÞ   c                 S   s   g | ]\}}t d | |ƒ‘qS )zt%dr   )rÛ   r  Útype_r0   r0   r1   rÜ   ñ  s     zAComponentReflectionTestExtra._type_round_trip.<locals>.<listcomp>c                 S   s   g | ]}|d  ‘qS )rñ   r0   r>  r0   r0   r1   rÜ   õ  s     )r   rö   r4  r   rn   )r9   rÏ   r/   r   rÞ   r0   r0   r1   Ú_type_round_tripí  s    þý
z-ComponentReflectionTestExtra._type_round_tripc                 C   sH   |   ||t dd¡¡D ],}t|tjƒs*t‚t|jdƒ t|jdƒ qd S )Né   r�   )rq  rú   r   rù   rH   r   Ú	precisionÚscale©r9   rÏ   r/   Útypr0   r0   r1   Útest_numeric_reflection÷  s      
ÿz4ComponentReflectionTestExtra.test_numeric_reflectionc                 C   s8   |   ||t d¡¡d }t|tjƒs(t‚t|jdƒ d S )Né4   r   )rq  rú   r   rù   rH   r   Úlengthru  r0   r0   r1   Útest_varchar_reflection   s      ÿþz4ComponentReflectionTestExtra.test_varchar_reflectionc              	   C   sX   t d|tdtdd�tdtdd�ƒ}| |¡ ttdd„ t|ƒ d¡D ƒƒddd	œƒ d S )
NrÞ   r.  Tr�   r/  Fc                 s   s   | ]}|d  |d fV  qdS )rN   r‘   Nr0   r  r0   r0   r1   Ú	<genexpr>  s   ÿzHComponentReflectionTestExtra.test_nullable_reflection.<locals>.<genexpr>)r.  r/  )r   r   r   r4  r   r‡   r   rn   )r9   rÏ   r/   rÞ   r0   r0   r1   Útest_nullable_reflection  s    ü
þûz5ComponentReflectionTestExtra.test_nullable_reflectionNZCASCADEzSET NULLz	NO ACTIONZRESTRICTzexpected,ondelete,onupdatec                    s(  i }|r||d< |r||d< |d kr(|}t d|tdtdd�dd� t d|tdtdd�td	ttjd
dd�ƒtdtdƒƒdd� t d|tdtdd�tdtdƒdd�tdtƒtjdgdgfddi|—Ždd� | |¡ t|ƒ}| 	d¡d d ‰ t
t‡ fdd„ˆ D ƒƒi ƒ | 	d¡d d ‰ t
ˆ |ƒ d S )NÚondeleteÚonupdateri  r!   Tr"   rT   r  Zx_idzx.idÚxidrO   Útesté
   ÚuserrN   r%   Fr�   Útidztable.idZmyfkr   rƒ   c                 3   s"   | ]}ˆ | r|ˆ | fV  qd S rh   r0   )rÛ   Úk©Úoptsr0   r1   r{  p  s      zLComponentReflectionTestExtra.test_get_foreign_key_options.<locals>.<genexpr>)r   r   r   rZ   r   r   r]   rM  r   rr   r   r‡   )r9   rÏ   r/   r,  r}  r~  rƒ   rj   r0   r…  r1   Útest_get_foreign_key_options  sV    *üú	 ÿÿÿ÷
z9ComponentReflectionTestExtra.test_get_foreign_key_options)r=   r>   r?   r@   r   re   r)   r*   r~   r{   Zindexes_with_expressionsrm  r*  ro  rq  rH  rw  rz  r|  Z1foreign_key_constraint_option_reflection_ondeleteZ1foreign_key_constraint_option_reflection_onupdateZ1fk_constraint_option_reflection_ondelete_noactionZ1fk_constraint_option_reflection_onupdate_restrictZ1fk_constraint_option_reflection_ondelete_restrictr‡  r0   r0   r0   r1   r]  p  sj   
  ÿ-
!
%



üüüüüüÛ'r]  c                   @   s0   e Zd ZdZdZedd„ ƒZdd„ Zdd„ Zd	S )
ÚNormalizedNameTest)Zdenormalized_namesTc                 C   sL   t tddd�|tdtdd�ƒ t tddd�|tdtdd�tdtdƒƒƒ d S )	NÚt1T©ra   r!   r"   rR  Út1idzt1.id)r   r   r   r   r   r-   r0   r0   r1   r2   {  s    
ý
üz NormalizedNameTest.define_tablesc                 C   s~   t ƒ }ttddd�|tjd�}|jd }|jj |jj	¡s>t
‚t ƒ }|jtjdd„ d� |jd jj |jd jj	¡szt
‚d S )	NrR  TrŠ  r  r‰  c                 S   s   |   ¡ dkS )N©r‰  rR  ©rb  )rN   rW  r0   r0   r1   Ú<lambda>”  ó    zINormalizedNameTest.test_reflect_lowercase_forced_tables.<locals>.<lambda>)Úonly)r   r   r   r   r4   rå   rE   r‹  Z
referencesr!   rH   rV  )r9   Úm2Zt2_refZt1_refZm3r0   r0   r1   Ú$test_reflect_lowercase_forced_tables‰  s    
  ÿ
 ÿz7NormalizedNameTest.test_reflect_lowercase_forced_tablesc                 C   sP   dd„ t tjƒ ¡ D ƒ}t|d  ¡ |d  ¡ ƒ t|d  ¡ |d  ¡ ƒ d S )Nc                 S   s   g | ]}|  ¡ d kr|‘qS )rŒ  r�  rÝ   r0   r0   r1   rÜ   ™  s   þz;NormalizedNameTest.test_get_table_names.<locals>.<listcomp>r   r  )r   r   r4   râ   r   Úupperrb  )r9   Z
tablenamesr0   r0   r1   ræ   ˜  s
    þz'NormalizedNameTest.test_get_table_namesN)	r=   r>   r?   r\  r@   rA   r2   r’  ræ   r0   r0   r0   r1   rˆ  w  s   
rˆ  c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zejj	d	d
„ ƒZ
dS )ÚComputedReflectionTestc                 C   s^   t tjƒ}| d¡}dd„ |D ƒ}td|d d kƒ t|d d d ƒ t|d d d ƒ d S )	NÚcomputed_default_tablec                 S   s   i | ]}|d  |“qS rO   r0   r>  r0   r0   r1   r?  ¨  s      zLComputedReflectionTest.test_computed_col_default_not_set.<locals>.<dictcomp>Z42Úwith_defaultró   ÚnormalÚcomputed_col)r   r   r4   rn   r   r   )r9   rj   r  Zcol_datar0   r0   r1   Ú!test_computed_col_default_not_set¤  s    

z8ComputedReflectionTest.test_computed_col_default_not_setc                 C   s¶   t tjƒ}| d¡}dd„ |D ƒ}dD ]}td|| kƒ q&|d }td|kƒ td|d kƒ t|  |d d ¡dƒ td	|d ktjj	j
ƒ tjj	j
r²t|d d	 tjjj
ƒ d S )
Nr•  c                 S   s   i | ]}|d  |“qS rO   r0   r>  r0   r0   r1   r?  ±  s      zKComputedReflectionTest.test_get_column_returns_computed.<locals>.<dictcomp>)r!   r—  r–  Úcomputedr˜  rd  ú	normal+42Ú	persisted)r   r   r4   rn   r   r   re  r   r)   Ú"computed_columns_reflect_persistedr+   Ú"computed_columns_default_persisted)r9   rj   r  r$   r  ÚcompDatar0   r0   r1   Ú test_get_column_returns_computed­  s$    


þ

þz7ComputedReflectionTest.test_get_column_returns_computedc                 C   sX   t d|| kƒ || d }t|  |d ¡|ƒ tjjjrTt d|kƒ t|d |ƒ d S )Nrš  rd  rœ  )r   r   re  r   r)   r�  r+   r   )r9   r$   Úcolumnrd  rœ  rŸ  r0   r0   r1   Úcheck_columnÂ  s    
z#ComputedReflectionTest.check_columnc                 C   sp   t tjƒ}| d¡}dd„ |D ƒ}|  |ddtjjj¡ tjj	jrR|  |ddd¡ tjj
jrl|  |d	d
d¡ d S )NÚcomputed_column_tablec                 S   s   i | ]}|d  |“qS rO   r0   r>  r0   r0   r1   r?  Î  s      zLComputedReflectionTest.test_get_column_returns_persisted.<locals>.<dictcomp>Úcomputed_no_flagr›  Úcomputed_virtualznormal+2FÚcomputed_storedz	normal-42T)r   r   r4   rn   r¢  r   r)   rž  r+   Úcomputed_columns_virtualÚcomputed_columns_stored©r9   rj   r  r$   r0   r0   r1   Ú!test_get_column_returns_persistedÊ  s.    

ü
ü
üz8ComputedReflectionTest.test_get_column_returns_persistedc                 C   sv   t tjƒ}|jdtjd�}dd„ |D ƒ}|  |ddtjjj	¡ tjj
j	rX|  |ddd	¡ tjjj	rr|  |d
dd¡ d S )Nr£  r'   c                 S   s   i | ]}|d  |“qS rO   r0   r>  r0   r0   r1   r?  ì  s      zXComputedReflectionTest.test_get_column_returns_persisted_with_schema.<locals>.<dictcomp>r¤  z	normal/42r¥  znormal/2Fr¦  z	normal*42T)r   r   r4   rn   r,   r¢  r   r)   rž  r+   r§  r¨  r©  r0   r0   r1   Ú-test_get_column_returns_persisted_with_schemaå  s4    
 ÿü
ü
üzDComputedReflectionTest.test_get_column_returns_persisted_with_schemaN)r=   r>   r?   r™  r   r¢  rª  r   r)   r*   r«  r0   r0   r0   r1   r”  £  s   	r”  c                   @   sH   e Zd Zd ZZdZdZedd„ ƒZdd„ Z	dd	„ Z
ejjd
d„ ƒZdS )ÚIdentityReflectionTestNT)Zidentity_columnsrH  c                 C   s|   t d|tdtƒtdttƒ ƒƒ t d|tdttdddd	d
ddd�ƒƒ tjjjrxt d|tdtƒtdttddd�ƒtj	d� d S )Nr‰  r—  Úid1rR  Úid2Tr   r   éþÿÿÿé*   é   ©ÚalwaysÚstartÚ	incrementÚminvalueÚmaxvalueÚcycleÚcacherœ   )r³  r´  r'   )
r   r   r   r   r   r)   r*   r+   r   r,   r-   r0   r0   r1   r2   
  s>    üùýý
ûz$IdentityReflectionTest.define_tablesc                 C   sÔ   t jjjr¬d}t|ƒD ]}||kr| |¡ q|r tt|ƒt|ƒƒ |D ]T}|dkrjt|| || kƒ qH|dkrˆt|| || kƒ qHt|| || |ƒ qHqÐt||ƒ n$t|d |d ƒ t|d |d ƒ d S )Nr²  r¶  >   r·  r¹  r´  rµ  )	r   r)   Zidentity_columns_standardr+   r  r"  r   rõ   r   )r9   ÚvalueÚexpÚapproxZcommon_keysr„  r0   r0   r1   Úcheck,  s     
	zIdentityReflectionTest.checkc                 C   s   t tjƒ}| d¡| d¡ }|D ]Ø}|d dkr@td|kƒ q"|d dkržt|d dkƒ t|d	 d ƒ td|kƒ | j|d td
ddddd
dd�dd� q"|d dkr"t|d dkƒ t|d	 d ƒ td|kƒ | j|d tdddddddd�d
d� q"d S )Nr‰  rR  rN   r—  Úidentityr­  r@  ©TÚautoró   Fr  éÿÿÿr²  T©r¼  r®  r   r   r¯  r°  r±  )	r   r   r4   rn   r   r   r   r½  r‡   ©r9   rj   r  r  r0   r0   r1   Útest_reflect_identityI  sN    
ù	õù	õz,IdentityReflectionTest.test_reflect_identityc                 C   sž   t tjƒ}|jdtjd�}|D ]z}|d dkr<td|kƒ q|d dkrt|d dkƒ t|d	 d ƒ td|kƒ | j|d t	d
ddddddd�d
d� qd S )Nr‰  r'   rN   r—  r¾  r­  r@  r¿  ró   Trœ   r  rÁ  Fr²  rÂ  )
r   r   r4   rn   r,   r   r   r   r½  r‡   rÃ  r0   r0   r1   Útest_reflect_identity_schemas  s,    
ù	õz3IdentityReflectionTest.test_reflect_identity_schema)r=   r>   r?   rD  rE  r@   r\  rA   r2   r½  rÄ  r   r)   r*   rÅ  r0   r0   r0   r1   r¬    s   
!*r¬  c                   @   s<   e Zd ZdZedd„ ƒZejjdd„ ƒZ	ejj
dd„ ƒZdS )	ÚCompositeKeyReflectionTestTc                 C   s¢   t d|tdtƒtdtƒtdt d¡ƒtjddddd�d dd	�}t d
|tdtdd�tdtƒtdtƒtdt d¡ƒtjdddg|jj	|jj
|jjgdd�d dd	�	 d S )NÚtb1r!   ÚattrrN   rœ   Zpk_tb1rO   Tr•   Útb2r"   ÚpidÚpattrÚpnameZfk_tb1_name_id_attr)r   r   r   rú   r¿   rZ   r[   r]   rE   rN   r!   rÈ  )r.   r/   rÇ  r0   r0   r1   r2   ‘  s2    ø
ýóz(CompositeKeyReflectionTest.define_tablesc                 C   s4   t | jƒ}| | jjj¡}t| d¡dddgƒ d S )Nr  rN   r!   rÈ  )r   rÉ   rp   rå   rÇ  rN   r   rA  )r9   rj   r#   r0   r0   r1   Útest_pk_column_order­  s    
z/CompositeKeyReflectionTest.test_pk_column_orderc                 C   s`   t | jƒ}| | jjj¡}tt|ƒdƒ |d }t| d¡dddgƒ t| d¡dd	d
gƒ d S )Nr  r   r  rN   r!   rÈ  r  rÌ  rÊ  rË  )	r   rÉ   rr   rå   rÉ  rN   r   rõ   rA  )r9   rj   Zforeign_keysr  r0   r0   r1   Útest_fk_column_order´  s    
z/CompositeKeyReflectionTest.test_fk_column_orderN)r=   r>   r?   r@   rA   r2   r   r)   rG  rÍ  rF  rÎ  r0   r0   r0   r1   rÆ  Ž  s   

rÆ  )
r   r]  rI  rK   r   rB   rˆ  r”  r¬  rÆ  )4r2  r`  r…   rZ   r‹   r   r   r   r   r   r   Z	provisionr	   r
   r(   r   r   r   r   r   r   r   r   r   r   r   r   rú   r   r   Zsql.elementsr   Z
sql.schemar   r   r   r/   rŒ   Z
TablesTestr   rB   rK   r   ZTestBaserI  r]  rˆ  ZComputedReflectionFixtureTestr”  r¬  rÆ  Ú__all__r0   r0   r0   r1   Ú<module>   sd   .;       !7  	,a 1