o
    y¬´\Ñ”  ã                   @   sf  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\Z Z!G dd„ de
j"ƒZ#G dd„ de
j"ƒZ$G dd „ d e
j"ƒZ%d!Z&dS )"é    Né   )Úassert_raises_message)Úconfig)Úengines)Úeq_)Úexpect_warnings)Úfixtures)Úis_©ÚColumn)ÚTableé   )Úevent)Úexc)Ú
ForeignKey)Úinspect)ÚInteger)ÚMetaData)ÚString)Útesting)Útypes)Ú	Inspector)ÚDDL)ÚIndex)Úquoted_name)NNc                   @   s$   e Zd ZdZedd„ ƒZdd„ ZdS )ÚHasTableTestTc                 C   s&   t d|tdtdd�tdtdƒƒƒ d S )NÚ
test_tableÚidT©Úprimary_keyÚdataé2   )r   r   r   r   ©ÚclsÚmetadata© r%   úZ/var/www/html/env/lib/python3.10/site-packages/sqlalchemy/testing/suite/test_reflection.pyÚdefine_tables#   s   üzHasTableTest.define_tablesc                 C   sX   t j ¡ �}t jj |d¡sJ ‚t jj |d¡rJ ‚W d   ƒ d S 1 s%w   Y  d S )Nr   Únonexistent_table)r   ÚdbÚbeginÚdialectÚ	has_table)ÚselfÚconnr%   r%   r&   Útest_has_table,   s   "þzHasTableTest.test_has_tableN)Ú__name__Ú
__module__Ú__qualname__Ú__backend__Úclassmethodr'   r/   r%   r%   r%   r&   r       s
    
r   c                   @   sÄ  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	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ejjd d!„ ƒZejjejj d"d#„ ƒƒZ!d‹d$d%„Z"ejj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Œd.d/„Z(ejjd0d1„ ƒZ)ejd2d3„ ƒZ*ejjd4d5„ ƒZ+ejjd6d7„ ƒZ,ejjejd8d9„ ƒƒZ-ejjejj d:d;„ ƒƒZ.ejj/d<d=„ ƒZ0ejj/ejj$ejjd>d?„ ƒƒƒZ1ejj$d@dA„ ƒZ2ejj$ejj dBdC„ ƒƒZ3ejd‹dDdE„ƒZ4ejj5dFdG„ ƒZ6ejjejj5ejj dHdI„ ƒƒƒZ7ejjejdJdK„ ƒƒZ8ejd‹dLdM„ƒZ9ejjdNdO„ ƒZ:ejjejj dPdQ„ ƒƒZ;ejj<ejj dRdS„ ƒƒZ=ejj>dTdU„ ƒZ?ejj@dVdW„ ƒZAejdXdY„ ƒZBdZd[„ ZCejd‹d\d]„ƒZDejjEd^d_„ ƒZFejjEejj d`da„ ƒƒZGejdbdc„ ƒZHejjEddde„ ƒZIejjEdfdg„ ƒZJejjKejdhdi„ ƒƒZLejjMdjdk„ ƒZNejj/ejjMdldm„ ƒƒZOejj/dndo„ ƒZPejjMejj dpdq„ ƒƒZQejd‹drds„ƒZRejjSdtdu„ ƒZTejjSejj dvdw„ ƒƒZUejd‹dxdy„ƒZVejd‹dzd{„ƒZWejjd|d}„ ƒZXejjejj d~d„ ƒƒZYe Zd€d�¡ejd‹d‚dƒ„ƒƒZ[d„d…„ Z\ejj d†d‡„ ƒZ]ejjejdˆd‰„ ƒƒZ^dS )�ÚComponentReflectionTestNTc                 C   s0   t jjjrddlm} tjt|j	d�d�S t j
S )Nr   )Úpool)Ú	poolclass)Úoptions)r   ÚrequirementsÚindependent_connectionsÚenabledÚ
sqlalchemyr6   r   Útesting_engineÚdictÚ
StaticPoolr)   )r#   r6   r%   r%   r&   Ú
setup_bind7   s   

ÿz"ComponentReflectionTest.setup_bindc                 C   s.   |   |d ¡ tjjjr|   |tjj¡ d S d S ©N)Údefine_reflected_tablesr   ÚrequiresÚschemasr;   r   Útest_schemar"   r%   r%   r&   r'   B   s   
ÿz%ComponentReflectionTest.define_tablesc                 C   s  |r|d }nd}t jjjr=t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�}n!t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�r+|d u 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)� n7t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�ro|  ||¡ |�sotd.|td/t d¡ƒdd0�}td1|tdtj
dd�td/t d¡ƒdd0�}td2|jj ¡ ƒ td3|jj ¡ ƒ t jjj�r{|  ||¡ |�s‹t jjj�r�|  |¡ d S d S d S )4NÚ.Ú ÚusersÚuser_idTr   Útest1é   F©ÚnullableÚtest2Úparent_user_idz%susers.user_idÚ
user_id_fk©Úname)ÚschemaÚtest_needs_fkÚ
dingalingsÚdingaling_idÚ
address_idz%semail_addresses.address_idr    é   Úemail_addressesÚremote_user_idÚemail_addressé   Úemail_ad_pkÚcomment_testr   ú
id comment)r   Úcommentúdata % comment)r`   Úd2ú)Comment types type speedily ' " \ '' Fun!úthe test % ' " \ table comment)rS   r`   Úlocal_tableÚ	remote_idz%s.remote_table_2.id)rT   rS   Úremote_tableÚlocal_idz%s.local_table.idÚremote_table_2Únoncol_idx_test_nopkÚq©rT   Únoncol_idx_test_pkÚnoncol_idx_nopkÚnoncol_idx_pk)r   rC   Úself_referential_foreign_keysr;   r   r   ÚsaÚINTÚCHARÚFloatr   r   r   ÚcrI   ÚPrimaryKeyConstraintÚcross_schema_fk_reflectionr   rE   r)   r+   Údefault_schema_nameÚindex_reflectionÚdefine_indexr   rk   ÚdescÚview_column_reflectionÚdefine_viewsÚtemp_table_reflectionÚdefine_temp_tables)r#   r$   rS   Úschema_prefixrH   rj   rm   r%   r%   r&   rB   H   s  

ÿýòù
ýõ
ÿöýõ
ÿþôÿÿþóú	üûÿz/ComponentReflectionTest.define_reflected_tablesc                 C   s´   t  d¡rdgddœ}nddgi}td|tdtjd	d
�tdt d¡ƒtdtjƒtjddd�t dd¡fi |¤Ž}t j	j
jrVt j	jjrXt |dtdƒ¡ t |dtdƒ¡ d S d S d S )NÚoraclezGLOBAL TEMPORARYzPRESERVE ROWS)ÚprefixesÚoracle_on_commitr‚   Ú	TEMPORARYÚuser_tmpr   Tr   rR   r!   ÚfooÚuser_tmp_uqrQ   Úuser_tmp_ixÚafter_createz:create temporary view user_tmp_v as select * from user_tmpÚbefore_dropzdrop view user_tmp_v)r   Úagainstr   r   rq   rr   ÚVARCHARÚUniqueConstraintr   rC   Úview_reflectionr;   Útemporary_viewsr   Úlistenr   )r#   r$   Úkwr…   r%   r%   r&   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   ru   rJ   rN   rI   )r#   r$   rH   r%   r%   r&   rz   ú   s   z$ComponentReflectionTest.define_indexc                 C   s^   dD ]*}|}|rd||f }|d }d||f }t  |dt|ƒ¡ t  |dtd| ƒ¡ qd S )N)rH   rY   z%s.%sÚ_vz"CREATE VIEW %s AS SELECT * FROM %sr‰   rŠ   zDROP VIEW %s)r   r�   r   )r#   r$   rS   Ú
table_nameÚfullnameÚ	view_nameÚqueryr%   r%   r&   r}   ÿ   s   þÿõz$ComponentReflectionTest.define_viewsc                 C   s$   t tjƒ}|  tjj| ¡ v ¡ d S rA   )r   r   r)   Úassert_r   rE   Úget_schema_names©r-   Úinspr%   r%   r&   Útest_get_schema_names  s   
z-ComponentReflectionTest.test_get_schema_namesc                 C   s4   t  ¡ }t|jdƒrJ ‚t|ƒ t|jdƒsJ ‚d S )Nrx   )r   r=   Úhasattrr+   r   )r-   Úenginer%   r%   r&   Útest_dialect_initialize  s   z/ComponentReflectionTest.test_dialect_initializec                 C   s    t tjƒ}t|jtjjjƒ d S rA   )r   r   r)   r   rx   r+   r›   r%   r%   r&   Útest_get_default_schema_name  s   
z4ComponentReflectionTest.test_get_default_schema_nameÚtablec                    s¼   g d¢‰ | j }| jj| jj| jj}}}t|jƒ}|dkr4| |¡}	|	 ¡  ddg}
t	t
|	ƒ|
ƒ d S ‡ fdd„|j||d�D ƒ}	|dkrQg d	¢}
t	|	|
ƒ d S g d
¢}
t	t
|	ƒ|
ƒ d S )N)r^   rm   rj   re   rg   ri   ÚviewÚemail_addresses_vÚusers_vc                    s   g | ]}|ˆ vr|‘qS r%   r%   ©Ú.0Út©Ú_ignore_tablesr%   r&   Ú
<listcomp><  s
    þzAComponentReflectionTest._test_get_table_names.<locals>.<listcomp>©Úorder_byÚforeign_key)rH   rY   rU   )rU   rY   rH   )r$   ÚtablesrH   rY   rU   r   ÚbindÚget_view_namesÚsortr   ÚsortedÚget_table_names)r-   rS   Ú
table_typer­   ÚmetarH   Ú	addressesrU   rœ   Útable_namesÚanswerr%   r©   r&   Ú_test_get_table_names"  s(   
ý


þz-ComponentReflectionTest._test_get_table_namesc                 C   ó&   t | jƒ}| ¡ }tt|ƒdgƒ d S )Nr…   )r   r°   Úget_temp_table_namesr   r³   ©r-   rœ   Útemp_table_namesr%   r%   r&   Útest_get_temp_table_namesI  s   
z1ComponentReflectionTest.test_get_temp_table_namesc                 C   r»   )NÚ
user_tmp_v)r   r°   Úget_temp_view_namesr   r³   r½   r%   r%   r&   Útest_get_temp_view_namesO  s   
z0ComponentReflectionTest.test_get_temp_view_namesc                 C   ó   |   ¡  d S rA   ©rº   ©r-   r%   r%   r&   Útest_get_table_namesW  ó   z,ComponentReflectionTest.test_get_table_namesc                 C   ó   | j dd� d S )Nr®   r¬   rÄ   rÅ   r%   r%   r&   Útest_get_table_names_fks[  s   z0ComponentReflectionTest.test_get_table_names_fksc                 C   rÃ   rA   )Ú_test_get_commentsrÅ   r%   r%   r&   Útest_get_comments`  rÇ   z)ComponentReflectionTest.test_get_commentsc                 C   ó   |   tjj¡ d S rA   )rÊ   r   r   rE   rÅ   r%   r%   r&   Útest_get_comments_with_schemad  ó   z5ComponentReflectionTest.test_get_comments_with_schemac                 C   st   t 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^   ©rS   Útextrd   rH   c                 S   s   g | ]}|d  |d dœ‘qS )rR   r`   )rR   r`   r%   )r§   Úrecr%   r%   r&   r«   t  s    ÿÿz>ComponentReflectionTest._test_get_comments.<locals>.<listcomp>r_   r   )r`   rR   ra   r    rc   rb   )r   r   r)   r   Úget_table_commentÚget_columns)r-   rS   rœ   r%   r%   r&   rÊ   i  s"   
þþüýûz*ComponentReflectionTest._test_get_commentsc                 C   rÌ   rA   ©rº   r   r   rE   rÅ   r%   r%   r&   Ú test_get_table_names_with_schema„  rÎ   z8ComponentReflectionTest.test_get_table_names_with_schemac                 C   rÈ   ©Nr£   )rµ   rÄ   rÅ   r%   r%   r&   Útest_get_view_names‰  ó   z+ComponentReflectionTest.test_get_view_namesc                 C   ó   | j tjjdd� d S rÖ   rÔ   rÅ   r%   r%   r&   Útest_get_view_names_with_schema�  ó   
ÿz7ComponentReflectionTest.test_get_view_names_with_schemac                 C   s   |   ¡  | j dd� d S rÖ   rÄ   rÅ   r%   r%   r&   Útest_get_tables_and_views”  s   z1ComponentReflectionTest.test_get_tables_and_viewsc                 C   st  t tjƒ}| jj| jj| jj}}}ddg}|dkrddg}t|jƒ}t	|||fƒD ]Œ\}	}
|}|j
|	|d�}|  t|ƒdkt|ƒ¡ t|
jƒD ]m\}}t|j|| d ƒ || d	 j}|j}t|tjjƒrk|j}t d
¡r{|tjtjfv 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 u s¶J ‚qIq+d S )NrH   rY   r£   r¥   r¤   rÏ   r   rR   Útyper�   z%s(%s), %s(%s)Údefault)$r   r   r)   r¯   rH   rY   rU   r   r°   ÚziprÓ   r™   ÚlenÚ	enumerateÚcolumnsr   rR   Ú	__class__rÝ   Ú
isinstancerq   r   Ú
TypeEnginer‹   Ú	sql_typesÚDateÚDateTimeÚsetÚ__mro__Úintersectionr   ÚNumericÚTimer   Ú_Binaryr   )r-   rS   rµ   r¶   rH   r·   rU   r¸   rœ   r•   r¢   Úschema_nameÚcolsÚiÚcolÚctypeÚ	ctype_defr%   r%   r&   Ú_test_get_columnsš  sd   

ý
þùÿýñÿï€Øùz)ComponentReflectionTest._test_get_columnsc                 C   rÃ   rA   ©rõ   rÅ   r%   r%   r&   Útest_get_columnsÖ  rÇ   z(ComponentReflectionTest.test_get_columnsc                 G   sF   t d| jgdd„ t|ƒD ƒ¢R Ž }| ¡  dd„ t| jjƒ d¡D ƒS )Nr¨   c                 S   s   g | ]\}}t d | |ƒ‘qS )zt%dr
   )r§   rñ   Útype_r%   r%   r&   r«   ß  s    z<ComponentReflectionTest._type_round_trip.<locals>.<listcomp>c                 S   ó   g | ]}|d  ‘qS )rÝ   r%   ©r§   ru   r%   r%   r&   r«   ã  s    ÿ)r   r$   rá   Úcreater   r°   rÓ   )r-   r   r¨   r%   r%   r&   Ú_type_round_tripÚ  s   þýÿz(ComponentReflectionTest._type_round_tripc                 C   sD   |   t dd¡¡D ]}t|tjƒsJ ‚t|jdƒ t|jdƒ q	d S )Né   rK   )rü   ræ   rì   rä   r   Ú	precisionÚscale©r-   Útypr%   r%   r&   Útest_numeric_reflectionç  s
   ýz/ComponentReflectionTest.test_numeric_reflectionc                 C   s4   |   t d¡¡d }t|tjƒsJ ‚t|jdƒ d S )Né4   r   )rü   ræ   r   rä   r   Úlengthr   r%   r%   r&   Útest_varchar_reflectionî  s   z/ComponentReflectionTest.test_varchar_reflectionc              	   C   s\   t d| jtdtdd�tdtdd�ƒ}| ¡  ttdd„ t| jjƒ 	d¡D ƒƒddd	œƒ d S )
Nr¨   ÚaTrL   ÚbFc                 s   s    � | ]}|d  |d fV  qdS )rR   rM   Nr%   ©r§   rò   r%   r%   r&   Ú	<genexpr>ÿ  s
   € ÿ
ÿzCComponentReflectionTest.test_nullable_reflection.<locals>.<genexpr>)r  r  )
r   r$   r   r   rû   r   r>   r   r°   rÓ   )r-   r¨   r%   r%   r&   Útest_nullable_reflectionô  s   üþûz0ComponentReflectionTest.test_nullable_reflectionc                 C   ó   | j tjjd� d S ©NrÏ   ©rõ   r   r   rE   rÅ   r%   r%   r&   Útest_get_columns_with_schema  ó   z4ComponentReflectionTest.test_get_columns_with_schemac                 C   sj   t | jƒ}| jj}t|jƒ}| d¡}|  t|ƒdkt|ƒ¡ t|j	ƒD ]\}}t
|j|| d ƒ q$d S )Nr…   r   rR   )r   r°   r¯   r…   r   rÓ   r™   rà   rá   râ   r   rR   )r-   r¶   r…   rœ   rð   rñ   rò   r%   r%   r&   Útest_get_temp_table_columns  s   


ÿz3ComponentReflectionTest.test_get_temp_table_columnsc                 C   s0   t | jƒ}| d¡}tdd„ |D ƒg d¢ƒ d S )NrÀ   c                 S   rù   rQ   r%   r  r%   r%   r&   r«     ó    zFComponentReflectionTest.test_get_temp_view_columns.<locals>.<listcomp>)r   rR   r†   )r   r°   rÓ   r   )r-   rœ   rð   r%   r%   r&   Útest_get_temp_view_columns  s   

z2ComponentReflectionTest.test_get_temp_view_columnsc                 C   rÈ   rÖ   rö   rÅ   r%   r%   r&   Útest_get_view_columns  rØ   z-ComponentReflectionTest.test_get_view_columnsc                 C   rÙ   )Nr£   )rS   rµ   r  rÅ   r%   r%   r&   Ú!test_get_view_columns_with_schema"  rÛ   z9ComponentReflectionTest.test_get_view_columns_with_schemac           
      C   sª   | j }| jj| jj}}t|jƒ}|j|j|d�}|d }t|dgƒ |j|j|d�}|d }	t|	dgƒ t	j
j ¡ � t|d dƒ W d   ƒ d S 1 sNw   Y  d S )NrÏ   Úconstrained_columnsrI   rW   rR   r]   )r$   r¯   rH   rY   r   r°   Úget_pk_constraintrR   r   r   rC   Úreflects_pk_namesÚfail_if)
r-   rS   r¶   rH   r·   rœ   Ú
users_consÚusers_pkeysÚ	addr_consÚ
addr_pkeysr%   r%   r&   Ú_test_get_pk_constraint)  s   
"ÿz/ComponentReflectionTest._test_get_pk_constraintc                 C   rÃ   rA   )r  rÅ   r%   r%   r&   Útest_get_pk_constraint:  rÇ   z.ComponentReflectionTest.test_get_pk_constraintc                 C   r  r  )r  r   r   rE   rÅ   r%   r%   r&   Ú"test_get_pk_constraint_with_schema>  s   z:ComponentReflectionTest.test_get_pk_constraint_with_schemac                 C   s0   | j }| jj}t|jƒ}ttjd|j|j	ƒ d S )Nz+.*get_primary_keys\(\) method is deprecated)
r$   r¯   rH   r   r°   r   Úsa_excÚSADeprecationWarningÚget_primary_keysrR   )r-   r¶   rH   rœ   r%   r%   r&   Ú test_deprecated_get_primary_keysD  s   
üz8ComponentReflectionTest.test_deprecated_get_primary_keysc                 C   sl  | j }| jj| jj| jj}}}t|jƒ}|}tjj	j
rj|j|j|d�}|d }	tjj ¡ � t|	d dƒ W d   ƒ n1 sAw   Y  t|	d |ƒ t|	d |jƒ t|	d dgƒ tjj	j
rjt|	d	 d
gƒ |j|j|d�}
|
d }	tjj ¡ � |  |	d d u¡ W d   ƒ n1 s�w   Y  t|	d |ƒ t|	d |jƒ t|	d dgƒ t|	d	 dgƒ d S )NrÏ   r   rR   rP   Úreferred_schemaÚreferred_tableÚreferred_columnsrI   r  rO   rZ   )r$   r¯   rH   rY   rU   r   r°   r   rC   rp   r;   Úget_foreign_keysrR   Únamed_constraintsr  r   Úimplicitly_named_constraintsr™   )r-   rS   r¶   rH   r·   rU   rœ   Úexpected_schemaÚusers_fkeysÚfkey1Ú
addr_fkeysr%   r%   r&   Ú_test_get_foreign_keysQ  s6   
ý

ÿ
ÿz.ComponentReflectionTest._test_get_foreign_keysc                 C   rÃ   rA   )r.  rÅ   r%   r%   r&   Útest_get_foreign_keysv  rÇ   z-ComponentReflectionTest.test_get_foreign_keysc                 C   r  r  )r.  r   r   rE   rÅ   r%   r%   r&   Ú!test_get_foreign_keys_with_schemaz  r  z9ComponentReflectionTest.test_get_foreign_keys_with_schemac           	      C   s  |   dtjjj dtjj dtjj ¡\}}}t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 tjjjfv spJ ‚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  rf   rÏ   rh   )r¯   r   r)   r+   rx   r   rE   r   r'  rR   r   rà   )	r-   re   rg   ri   rœ   Úlocal_fkeysr,  Úremote_fkeysÚfkey2r%   r%   r&   Ú"test_get_inter_schema_foreign_keys  s2   


ý

ÿ
þz:ComponentReflectionTest.test_get_inter_schema_foreign_keysc                 C   rÈ   )NÚCASCADE)Úondelete©Ú_test_get_foreign_key_optionsrÅ   r%   r%   r&   Ú%test_get_foreign_key_options_ondelete¢  rØ   z=ComponentReflectionTest.test_get_foreign_key_options_ondeletec                 C   rÈ   )NzSET NULL)Úonupdater8  rÅ   r%   r%   r&   Ú%test_get_foreign_key_options_onupdate¦  rØ   z=ComponentReflectionTest.test_get_foreign_key_options_onupdatec                    s  | j }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	|j
ƒ}| d¡d d ‰ tt‡ fdd„ˆ D ƒƒi ƒ | d¡d d ‰ tt‡ fdd„ˆ D ƒƒ|ƒ d S )NÚxr   Tr   rl   r¢   Úx_idzx.idÚxidrQ   Útesté
   ÚuserrR   r!   FrL   Útidztable.idÚmyfkr   r8   c                 3   ó$   � | ]}ˆ | r|ˆ | fV  qd S rA   r%   ©r§   Úk©Úoptsr%   r&   r	  Ò  ó   €" zHComponentReflectionTest._test_get_foreign_key_options.<locals>.<genexpr>c                 3   rE  rA   r%   rF  rH  r%   r&   r	  Õ  rJ  )r$   r   r   r   rq   r   r   ÚForeignKeyConstraintÚ
create_allr   r°   r'  r   r>   )r-   r8   r¶   rœ   r%   rH  r&   r9  ª  sH   üú	ÿÿÿ÷
 z5ComponentReflectionTest._test_get_foreign_key_optionsc                 C   sZ   dd„ |D ƒ}|D ]!}|d |v sJ ‚||  |d ¡ }|D ]}t|| || ƒ qq	d S )Nc                 S   rù   rQ   r%   )r§   Údr%   r%   r&   r«   Ø  r  z@ComponentReflectionTest._assert_insp_indexes.<locals>.<listcomp>rR   )Úindexr   )r-   ÚindexesÚexpected_indexesÚindex_namesÚe_indexrN  Úkeyr%   r%   r&   Ú_assert_insp_indexes×  s   ÿýz,ComponentReflectionTest._assert_insp_indexesc           	      C   sj   | j }| jj| jj| jj}}}t|jƒ}|jd|d�}dddgddœdg d¢d	dœg}|  ||¡ d S )
NrH   rÏ   FrJ   rN   r’   ©ÚuniqueÚcolumn_namesrR   )rI   rN   rJ   r“   )	r$   r¯   rH   rY   rU   r   r°   Úget_indexesrT  )	r-   rS   r¶   rH   r·   rU   rœ   rO  rP  r%   r%   r&   Ú_test_get_indexesß  s"   
ý
ýýúz)ComponentReflectionTest._test_get_indexesc                 C   rÃ   rA   )rY  rÅ   r%   r%   r&   Útest_get_indexesù  rÇ   z(ComponentReflectionTest.test_get_indexesc                 C   r  r  )rY  r   r   rE   rÅ   r%   r%   r&   Útest_get_indexes_with_schemaý  r  z4ComponentReflectionTest.test_get_indexes_with_schemac                 C   s‚   | j }t|jƒ}| |¡}d|dœg}|  ||¡ t|||jd�}tt|jƒdƒ t	t
|jƒd j|ƒ tt
|jƒd j|ƒ d S )NF)rV  rR   )Úautoload_withr1  r   )r$   r   r°   rX  rT  r   r   rà   rO  r	   Úlistr¢   rR   )r-   ÚtnameÚixnamer¶   rœ   rO  rP  r¨   r%   r%   r&   Ú_test_get_noncol_index  s   

z.ComponentReflectionTest._test_get_noncol_indexc                 C   ó   |   dd¡ d S )Nrj   rn   ©r`  rÅ   r%   r%   r&   Útest_get_noncol_index_no_pk  rØ   z3ComponentReflectionTest.test_get_noncol_index_no_pkc                 C   ra  )Nrm   ro   rb  rÅ   r%   r%   r&   Útest_get_noncol_index_pk  rØ   z0ComponentReflectionTest.test_get_noncol_index_pkc                 C   s¬   t d| jtdtdƒƒtdtdƒƒƒ t | jdtdƒ¡ t | jdtdƒ¡ | j ¡  t| jj	ƒ}t
dƒ� t| d¡d	dgd
dœgƒ W d   ƒ d S 1 sOw   Y  d S )Nr¨   r=  rX   Úyr‰   z+CREATE INDEX t_idx ON t(lower(x), lower(y))zCREATE INDEX t_idx_2 ON t(x)z>Skipped unsupported reflection of expression-based index t_idxÚt_idx_2r   )rR   rW  rV  )r   r$   r   r   r   r�   r   rL  r   r°   r   r   rX  r›   r%   r%   r&   Ú%test_reflect_expression_based_indexes  s0   üýÿ
ÿþ"ýz=ComponentReflectionTest.test_reflect_expression_based_indexesc                 C   rÃ   rA   )Ú_test_get_unique_constraintsrÅ   r%   r%   r&   Útest_get_unique_constraints8  rÇ   z3ComponentReflectionTest.test_get_unique_constraintsc                 C   sB   t | jƒ}| d¡}|D ]}| dd ¡ qt|dgddœgƒ d S )Nr…   Úduplicates_indexrR   r‡   )rW  rR   )r   r°   Úget_unique_constraintsÚpopr   )r-   rœ   Ú	reflectedÚreflr%   r%   r&   Ú&test_get_temp_table_unique_constraints<  s
   

z>ComponentReflectionTest.test_get_temp_table_unique_constraintsc                 C   sN   t | jƒ}| d¡}|D ]}| dd ¡ qtdd„ |D ƒddgddœgƒ d S )	Nr…   Údialect_optionsc                 S   s   g | ]
}|d  dkr|‘qS )rR   rˆ   r%   ©r§   Úidxr%   r%   r&   r«   P  s    zGComponentReflectionTest.test_get_temp_table_indexes.<locals>.<listcomp>Fr†   rˆ   rU  )r   r°   rX  rl  r   )r-   rœ   rO  Úindr%   r%   r&   Útest_get_temp_table_indexesG  s   

ýÿüz3ComponentReflectionTest.test_get_temp_table_indexesc                 C   r  r  )rh  r   r   rE   rÅ   r%   r%   r&   Ú'test_get_unique_constraints_with_schemaZ  r  z?ComponentReflectionTest.test_get_unique_constraints_with_schemac                 C   s¶  t ddgdœdg d¢dœdg d¢dœdd	d
gdœddgdœddgdœgt d¡d�}| j}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Ž¡ qW| ¡  t|jƒ}t |jd|d�t d¡d�}tƒ }t||ƒD ]\}	}
|
 dd ¡}|r™| |¡ t|	|
ƒ qˆtƒ }td||j|d�}tdd„ |jD ƒƒ}tdd„ |jD ƒƒ dg¡}| |¡rÊJ ‚|rÙt||ƒ t|tƒ ƒ d S d S )NÚunique_ar  )rR   rW  Úunique_a_b_c)r  r  ru   Úunique_c_a_b)ru   r  r  Úunique_asc_keyÚascrS  zi.have.dotsr  zi have spacesru   rR   ©rS  Útesttblr\   rX   rÏ   rW  rj  )r\  rS   c                 S   s   g | ]}|j ‘qS r%   rQ   rq  r%   r%   r&   r«      s    zHComponentReflectionTest._test_get_unique_constraints.<locals>.<listcomp>c                 S   s   g | ]}t |tjƒr|j‘qS r%   )rä   rq   r�   rR   )r§   Úuqr%   r%   r&   r«   ¢  s    
ýÿ)r³   ÚoperatorÚ
itemgetterr$   r   r   rq   r   r   Úappend_constraintr�   rL  r   r°   rk  ré   rß   rl  Úaddr   r   rO  ÚconstraintsÚ
differencerë   )r-   rS   ÚuniquesÚ	orig_metar¢   ÚucÚ	inspectorrm  Únames_that_duplicate_indexÚorigrn  ÚdupeÚreflected_metadataÚ	idx_namesÚuq_namesr%   r%   r&   rh  _  sr   


ú÷
÷ÿ
þ
üþÿú
þz4ComponentReflectionTest._test_get_unique_constraintsc                 C   rÃ   rA   )Ú_test_get_check_constraintsrÅ   r%   r%   r&   Útest_get_check_constraints®  rÇ   z2ComponentReflectionTest.test_get_check_constraintsc                 C   r  r  )rŽ  r   r   rE   rÅ   r%   r%   r&   Ú!test_get_check_constraints_schema²  r  z9ComponentReflectionTest.test_get_check_constraints_schemac              	      sœ   | j }td|tdtƒ ƒtjddd�tjddd�|d� | ¡  t|jƒ}t	|j
d|d�t d	¡d
�}dd„ ‰ ‡ fdd„|D ƒ}t|dddœdddœgƒ d S )NÚsa_ccr  za > 1 AND a < 5Úcc1rQ   za = 1 OR (a > 2 AND a < 5)Úcc2rÏ   rR   r{  c                 S   s   d  t d|  ¡ tj¡¡S )Nú zand|\d|=|a|or|<|>)ÚjoinÚreÚfindallÚlowerÚI)Úsqltextr%   r%   r&   Ú	normalizeÎ  s   ÿzFComponentReflectionTest._test_get_check_constraints.<locals>.normalizec                    s"   g | ]}|d  ˆ |d ƒdœ‘qS )rR   rš  ©rR   rš  r%   )r§   Úitem©r›  r%   r&   r«   Ó  s    ÿÿzGComponentReflectionTest._test_get_check_constraints.<locals>.<listcomp>za > 1 and a < 5rœ  za = 1 or a > 2 and a < 5)r$   r   r   r   rq   ÚCheckConstraintrL  r   r°   r³   Úget_check_constraintsr~  r  r   )r-   rS   r…  r‡  rm  r%   rž  r&   rŽ  ·  s2   
ú	
þ
þþþz3ComponentReflectionTest._test_get_check_constraintsc                 C   sh   | j }| jj| jj| jj}}}d}d}t|jƒ}|j||d�}	|  |	¡ |j||d�}
|  |
¡ d S )Nr¥   r¤   rÏ   )	r$   r¯   rH   rY   rU   r   r°   Úget_view_definitionr™   )r-   rS   r¶   rH   r·   rU   Ú
view_name1Ú
view_name2rœ   Úv1Úv2r%   r%   r&   Ú_test_get_view_definitionß  s   
ý

z1ComponentReflectionTest._test_get_view_definitionc                 C   rÃ   rA   )r¦  rÅ   r%   r%   r&   Útest_get_view_definitionï  rÇ   z0ComponentReflectionTest.test_get_view_definitionc                 C   r  r  )r¦  r   r   rE   rÅ   r%   r%   r&   Ú$test_get_view_definition_with_schemaó  r  z<ComponentReflectionTest.test_get_view_definition_with_schemaÚ
postgresqlzPG specific featurec           	      C   sL   | j }| jj| jj| jj}}}t|jƒ}| ||¡}|  t	|t
ƒ¡ d S rA   )r$   r¯   rH   rY   rU   r   r°   Úget_table_oidr™   rä   Úint)	r-   r•   rS   r¶   rH   r·   rU   rœ   Úoidr%   r%   r&   Ú_test_get_table_oidø  s   
ý
z+ComponentReflectionTest._test_get_table_oidc                 C   s   |   d¡ d S )NrH   )r­  rÅ   r%   r%   r&   Útest_get_table_oid  s   z*ComponentReflectionTest.test_get_table_oidc                 C   s   | j dtjjd� d S )NrH   rÏ   )r­  r   r   rE   rÅ   r%   r%   r&   Útest_get_table_oid_with_schema  s   z6ComponentReflectionTest.test_get_table_oid_with_schemac                 C   sN   | j }t|jƒ}dD ]\}}| |¡}dd„ |D ƒ| }| dd¡s$J ‚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.

        ))rH   rI   )rY   rW   )rU   rV   c                 S   s   i | ]}|d  |“qS rQ   r%   rú   r%   r%   r&   Ú
<dictcomp>$  s    zBComponentReflectionTest.test_autoincrement_col.<locals>.<dictcomp>ÚautoincrementTN)r$   r   r°   rÓ   Úget)r-   r¶   rœ   r^  Úcnamerð   Úid_r%   r%   r&   Útest_autoincrement_col  s   

ùz.ComponentReflectionTest.test_autoincrement_col)Nr¢   NrA   )Nr¢   )_r0   r1   r2   Úrun_insertsÚrun_deletesr3   r4   r@   r'   rB   r   rz   r}   r   rC   Úschema_reflectionr�   r    r¡   Úprovide_metadatarº   r¾   r¿   rŽ   r�   rÂ   Útable_reflectionrÆ   Ú!foreign_key_constraint_reflectionrÉ   Úcomment_reflectionrË   rD   rÍ   rÊ   rÕ   r|   r×   rÚ   rÜ   rõ   r÷   rü   r  r  r
  r  r~   r  r  r  r  r  Ú!primary_key_constraint_reflectionr  r  r#  r.  r/  r0  rw   r5  Ú1foreign_key_constraint_option_reflection_ondeleter:  Ú1foreign_key_constraint_option_reflection_onupdater<  r9  rT  rY  ry   rZ  r[  r`  rc  rd  Úindexes_with_expressionsrg  Úunique_constraint_reflectionri  ro  rt  ru  rh  Úcheck_constraint_reflectionr�  r�  rŽ  r¦  r§  r¨  Úonly_onr­  r®  r¯  rµ  r%   r%   r%   r&   r5   2   s<   



 
#




ÿ&





<







$
!


,




	
N
'


r5   c                   @   s0   e Zd ZdZdZedd„ ƒZdd„ Zdd„ Zd	S )
ÚNormalizedNameTest)Ú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©Úquoter   r   Út2Út1idzt1.id)r   r   r   r   r   r"   r%   r%   r&   r'   ,  s   
ý
üz NormalizedNameTest.define_tablesc                 C   s€   t tjƒ}ttddd�|dd�}|jd }|jj |jj	¡s J ‚t tjƒ}|j
dd„ d� |jd jj |jd jj	¡s>J ‚d S )	NrÉ  TrÇ  )ÚautoloadrÆ  c                 S   s   |   ¡ dv S )N©rÆ  rÉ  ©r˜  )rR   Úmr%   r%   r&   Ú<lambda>B  s    zINormalizedNameTest.test_reflect_lowercase_forced_tables.<locals>.<lambda>)Úonly)r   r   r)   r   r   r¯   ru   rÊ  Ú
referencesr   Úreflect)r-   Úm2Út2_refÚt1_refÚm3r%   r%   r&   Ú$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 v r|‘qS )rÌ  rÍ  r¦   r%   r%   r&   r«   F  s
    þz;NormalizedNameTest.test_get_table_names.<locals>.<listcomp>r   r1  )r   r   r)   r´   r   Úupperr˜  )r-   Ú
tablenamesr%   r%   r&   rÆ   E  s
   þz'NormalizedNameTest.test_get_table_namesN)	r0   r1   r2   Ú__requires__r3   r4   r'   r×  rÆ   r%   r%   r%   r&   rÄ  (  s    
rÄ  )r5   r   rÄ  )'r~  r–  r<   rq   rG   r   r   r   r   r   r   r	   rS   r   r   r   r   r   r   r   r   r   r   r   r   ræ   Úengine.reflectionr   r   r   Úsql.elementsr   r$   rH   Ú
TablesTestr   r5   rÄ  Ú__all__r%   r%   r%   r&   Ú<module>   sJ           }(