o
    Šåg­ ã                   @   sÀ  d dl Z 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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m0Z0 d(\Z1Z2G d)d*„ d*ej3ƒZ4G d+d,„ d,e4ƒZ5G d-d.„ d.ej3ƒZ6G d/d0„ d0ej7ƒZ8G d1d2„ d2ej3ƒZ9d3d4„ Z:G d5d6„ d6e-e4ƒZ;G d7d8„ d8ej7ƒZ<G d9d:„ d:e,ej7ƒZ=G d;d<„ d<ej3ƒZ>G d=d>„ d>ej?ƒZ@G d?d@„ d@ej3ƒZAG dAdB„ dBej3ƒZBdCZCdS )Dé    Né   )Úconfig)Úengines)Úeq_)Úexpect_raises)Úexpect_raises_message)Úexpect_warnings)Úfixtures)Úis_)Úget_temp_table_name)Útemp_table_keyword_args©ÚColumn)ÚTableé   )Úevent)Ú
ForeignKey)Úfunc)ÚIdentity)Úinspect)ÚInteger)ÚMetaData)ÚString)Útesting)Útypes)Ú	Inspector)Ú
ObjectKind)ÚObjectScope)ÚNoSuchTableError)ÚUnreflectableTableError)ÚDDL)ÚIndex)Úquoted_name)ÚBLANK_SCHEMA)ÚComparesIndexes)ÚComparesTables)Úis_false)Úis_true)Úmock©NNc                   @   s   e Zd Zedd„ ƒZdS )ÚOneConnectionTablesTestc                 C   s2   t jjjrddlm} tjt|j	dd�d�S t j
S )Nr   )ÚpoolÚclass)Ú	poolclassÚscope)Úoptions)r   ÚrequirementsÚindependent_connectionsÚenabledÚ
sqlalchemyr+   r   Útesting_engineÚdictÚ
StaticPoolÚdb)Úclsr+   © r9   úd/var/www/html/flaskapp/venv/lib/python3.10/site-packages/sqlalchemy/testing/suite/test_reflection.pyÚ
setup_bind8   s   
ÿz"OneConnectionTablesTest.setup_bindN)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr;   r9   r9   r9   r:   r*   7   s    r*   c                   @   sÈ   e Zd ZdZedd„ ƒZedd„ ƒZedd„ ƒZedd	„ ƒZ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jdd„ ƒZejjejjejjdd„ ƒƒƒZejjejjdd„ ƒƒZdS )ÚHasTableTestTc                 C   s‚   t d|tdtdd�tdtdƒƒƒ tjjjr*t d|tdtdd�tdtdƒƒtj	d� tjj
r3|  |¡ tjjjr?|  |¡ d S d S )	NÚ
test_tableÚidT©Úprimary_keyÚdataé2   Útest_table_s©Úschema)r   r   r   r   r   ÚrequiresÚschemasr2   r   Útest_schemaÚview_reflectionÚdefine_viewsÚhas_temp_tableÚdefine_temp_tables©r8   Úmetadatar9   r9   r:   Údefine_tablesJ   s&   ü
û

ÿzHasTableTest.define_tablesc                 C   st   d}t  |dt|ƒ¡ t  |dtdƒ¡ tjjjr8dtjtjf }t  |dt|ƒ¡ t  |dtdtj ƒ¡ d S d S )Nz1CREATE VIEW vv AS SELECT id, data FROM test_tableÚafter_createÚbefore_dropzDROP VIEW vvz9CREATE VIEW %s.vv AS SELECT id, data FROM %s.test_table_szDROP VIEW %s.vv)	r   Úlistenr    r   rJ   rK   r2   r   rL   )r8   rR   Úqueryr9   r9   r:   rN   `   s"   
þÿÿý÷zHasTableTest.define_viewsc                 C   ó   t ttjdtj› �ƒS ©NÚ	user_tmp_©r   r   r7   Úident©r8   r9   r9   r:   Útemp_table_namev   ó   ÿzHasTableTest.temp_table_namec              	   C   sŒ   t ttjƒ}|  ¡ }t||tdtjdd�tdt d¡ƒfi |¤Ž}t	j
jjrBt	j
jjrDt |dtdtj ƒ¡ t |dtd	ƒ¡ d S d S d S )
NrB   TrC   ÚnamerF   rT   ú=create temporary view user_tmp_v as select * from user_tmp_%srU   údrop view user_tmp_v)r   r   r7   r^   r   r   ÚsaÚINTÚVARCHARr   rJ   rM   r2   Útemporary_viewsr   rV   r    r\   ©r8   rR   ÚkwÚ
table_nameÚuser_tmpr9   r9   r:   rP   |   s2   üûÿþÿÿýôzHasTableTest.define_temp_tablesc                 C   sl   t j ¡ �'}tt jj |d¡ƒ tt jj |d¡ƒ tt jj |d¡ƒ W d   ƒ d S 1 s/w   Y  d S )NrA   rG   Únonexistent_table)r   r7   Úbeginr'   ÚdialectÚ	has_tabler&   ©ÚselfÚconnr9   r9   r:   Útest_has_table•   s
   "ýzHasTableTest.test_has_tablec              	   C   sŠ   t tjƒ}t| d¡ƒ td|tdtƒƒ}t| d¡ƒ | 	tj¡ zt| d¡ƒ | 
¡  t| d¡ƒ W | tj¡ d S | tj¡ w )NrA   Ú	new_tableÚcol)r   r   r7   r'   rn   r   r   r   r&   ÚcreateÚclear_cacheÚdrop)rp   rR   ÚinspÚntr9   r9   r:   Útest_has_table_cache›   s   
z!HasTableTest.test_has_table_cachec                 C   s~   t j ¡ �0}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 d   ƒ d S 1 s8w   Y  d S )NrA   rH   rG   rk   )r   r7   rl   r&   rm   rn   rL   r'   ro   r9   r9   r:   Útest_has_table_schema¨   s"   ÿÿÿÿÿÿ"õz"HasTableTest.test_has_table_schemac                 C   sH   t j ¡ �}tt jjj|ddd�ƒ W d   ƒ d S 1 sw   Y  d S )NrA   Únonexistent_schemarH   )r   r7   rl   r&   rm   rn   ro   r9   r9   r:   Ú!test_has_table_nonexistent_schema»   s   ÿÿ"ÿz.HasTableTest.test_has_table_nonexistent_schemac                 C   ó   t |ƒ}t| d¡ƒ d S ©NÚvv©r   r'   rn   ©rp   Ú
connectionrx   r9   r9   r:   Útest_has_table_viewÄ   s   z HasTableTest.test_has_table_viewc                 C   s"   t |ƒ}|  ¡ }t| |¡ƒ d S ©N)r   r^   r'   rn   )rp   rƒ   rx   r^   r9   r9   r:   Útest_has_table_temp_tableÉ   s   z&HasTableTest.test_has_table_temp_tablec                 C   r~   ©NÚ
user_tmp_vr�   r‚   r9   r9   r:   Útest_has_table_temp_viewÏ   s   z%HasTableTest.test_has_table_temp_viewc                 C   s   t |ƒ}t| dtj¡ƒ d S r   )r   r'   rn   r   rL   r‚   r9   r9   r:   Útest_has_table_view_schemaÖ   s   z'HasTableTest.test_has_table_view_schemaN)r<   r=   r>   Ú__backend__r?   rS   rN   r^   rP   rr   rz   r   rJ   rK   r{   r}   Úviewsr„   rO   r†   rM   rf   r‰   rŠ   r9   r9   r9   r:   r@   G   s6    







r@   c                   @   sX   e Zd ZdZdZedd„ ƒZejdddd�Z	d	d
„ Z
e	dd„ ƒZejje	dd„ ƒƒZdS )ÚHasIndexTestT)Úindex_reflectionc              	   C   s„   t d|tdtdd�tdtdƒƒtdtdƒƒƒ}td|jjƒ tjj	j
r@t d|tdtdd�tdtdƒƒtjd	�}td
|jjƒ d S d S )NrA   rB   TrC   rE   rF   Údata2Úmy_idxrH   Úmy_idx_s)r   r   r   r   r!   ÚcrE   r   rJ   rK   r2   r   rL   )r8   rR   Úttr9   r9   r:   rS   á   s$   û
ûøzHasIndexTest.define_tablesrm   Ú	inspectorÚkind©Úargnamesc                    s   |dkr
‡ fdd„S t ˆ ƒjS )Nrm   c                     s   t jjjˆ g| ¢R i |¤ŽS r…   )r   r7   rm   Ú	has_index)ÚaÚk©rq   r9   r:   Ú<lambda>ú   ó    z)HasIndexTest._has_index.<locals>.<lambda>)r   r˜   )rp   r•   rq   r9   r›   r:   Ú
_has_indexø   s   
zHasIndexTest._has_indexc              	   C   s$  |   ||¡}|ddƒsJ ‚|ddƒrJ ‚|ddƒrJ ‚|ddƒr"J ‚|ddƒr)J ‚|ddƒr0J ‚td| jjjjƒ}td|td	tƒtdd	ƒƒ}| 	|¡ | 	|¡ z6|d
krh|ddƒr\J ‚|ddƒrcJ ‚|j
 ¡  |ddƒdu sqJ ‚|ddƒdu szJ ‚W | |¡ | |¡ d S | |¡ | |¡ w )NrA   r�   r‘   rk   Únonexistent_idxÚmy_idx_2Útest_table_2Úmy_idx_3Úfoor”   T)rž   r!   ÚtablesrA   r’   r�   r   r   r   ru   Ú__self__rv   rw   )rp   r•   rƒ   rR   ÚmethÚidxÚtblr9   r9   r:   Útest_has_indexþ   s6   ü




ÿzHasIndexTest.test_has_indexc                 C   s`   |   ||¡}|ddtjd�sJ ‚|ddtjd�rJ ‚|ddtjd�r$J ‚|ddtjd�r.J ‚d S )NrA   r‘   rH   r�   rk   Únonexistent_idx_s)rž   r   rL   )rp   r•   rƒ   r¦   r9   r9   r:   Útest_has_index_schema  s   
ÿÿz"HasIndexTest.test_has_index_schemaN)r<   r=   r>   r‹   Ú__requires__r?   rS   r   Úcombinationsr•   rž   r©   rJ   rK   r«   r9   r9   r9   r:   r�   Ý   s    

r�   c                	   @   sX   e Zd ZdZdZdZejdddddd	�e d
ddg¡ejdddddd	�dd„ ƒƒƒZ	dS )Ú BizarroCharacterFKResolutionTestztests for #10275T)Ú!foreign_key_constraint_reflection)rB   )z(3))zcol%p)z[brack]Ú
columnnamer–   Úuse_compositeF)Úplain)z(2))z
per % cent)z
[brackets]Ú	tablenamec           
      C   s  t ||t|tddd�dd�}|r| tdtdd�¡ |r?t d|tdtdd�tdtƒtd	tƒt dd	g|jj|jjg¡dd� nt d|tdtdd�tdt	|jjƒƒdd� | 
|¡ tƒ }t d||d
�}|j| }	|jj |	jd ¡stJ ‚|r‚|jj |	jd ¡s„J ‚d S d S )NrB   T)ÚkeyrD   ©Útest_needs_fkÚid2rC   ÚotherÚrefÚref2©Úautoload_withr   é   )r   r   r   Úappend_columnrc   ÚForeignKeyConstraintr’   rB   r·   r   Ú
create_allr   r¤   r¹   Ú
referencesrº   )
rp   rƒ   rR   r±   r³   r°   r“   Úm2Úo2Út1r9   r9   r:   Útest_fk_ref0  sD   üù
û

ÿz,BizarroCharacterFKResolutionTest.test_fk_refN)
r<   r=   r>   Ú__doc__r‹   r¬   r   r­   Ú	variationrÅ   r9   r9   r9   r:   r®   *  s     
ÿûr®   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e	j
jdd„ ƒƒZee	j
j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 ]4}dtjjj d| ¡tjjj |¡f }t |dt|ƒ¡ t |dtd tjjj d| ¡ ƒ¡ q¢d S d S )!Núquote ' onerB   r`   rF   rE   Ú
related_idzpk quote ' one©r`   zix quote ' onezuq quote' onez
related.idzfk quote ' onezname != 'foo'zck quote ' onezquote ' one commentT)Úcommentr¶   úquote " twozpk quote " twozix quote " twozuq quote" twozfk quote " twozck quote " two zquote " two commentÚrelatedrC   rµ   z"CREATE VIEW %s AS SELECT * FROM %súview %srT   rU   zDROP VIEW %s)r   r   r   r   rc   ÚPrimaryKeyConstraintr!   ÚUniqueConstraintr¿   ÚCheckConstraintr   rJ   Úsymbol_names_w_double_quoter2   Úview_column_reflectionr   r7   rm   Úidentifier_preparerÚquoter   rV   r    )r8   rR   Únamesr`   rW   r9   r9   r:   rS   j  s˜   
þ
ÿî

þ
ÿîû

þÿ
ÿü
ÿÿÿýí
z$QuotedNameArgumentTest.define_tablesc                 C   s   t  ddt jjf¡| ƒS )N)rÊ   rÎ   )r   r­   rJ   rÔ   )Úfnr9   r9   r:   Úquote_fixtures½  s   
þýz%QuotedNameArgumentTest.quote_fixturesc                 C   sh   t tjƒ}tjjjr| |¡}tt	|t
ƒƒ d S ttƒ� | |¡}W d   ƒ d S 1 s-w   Y  d S r…   )r   r   r7   r   rJ   Úreflect_table_optionsr2   Úget_table_optionsr'   Ú
isinstancer5   r   ÚNotImplementedError)rp   r`   rx   Úresr9   r9   r:   Útest_get_table_optionsÃ  s   



"ÿz-QuotedNameArgumentTest.test_get_table_optionsc                 C   s    t tjƒ}| d| ¡sJ ‚d S )NrÐ   )r   r   r7   Úget_view_definition©rp   r`   rx   r9   r9   r:   Útest_get_view_definitionÎ  s   
z/QuotedNameArgumentTest.test_get_view_definitionc                 C   ó   t tjƒ}| |¡sJ ‚d S r…   )r   r   r7   Úget_columnsrâ   r9   r9   r:   Útest_get_columnsÔ  ó   
z'QuotedNameArgumentTest.test_get_columnsc                 C   rä   r…   )r   r   r7   Úget_pk_constraintrâ   r9   r9   r:   Útest_get_pk_constraintÙ  rç   z-QuotedNameArgumentTest.test_get_pk_constraintc                 C   rä   r…   )r   r   r7   Úget_foreign_keysrâ   r9   r9   r:   Útest_get_foreign_keysÞ  ó   
z,QuotedNameArgumentTest.test_get_foreign_keysc                 C   rä   r…   )r   r   r7   Úget_indexesrâ   r9   r9   r:   Útest_get_indexesä  rì   z'QuotedNameArgumentTest.test_get_indexesc                 C   rä   r…   )r   r   r7   Úget_unique_constraintsrâ   r9   r9   r:   Útest_get_unique_constraintsê  rì   z2QuotedNameArgumentTest.test_get_unique_constraintsc                 C   rä   r…   )r   r   r7   Úget_table_commentrâ   r9   r9   r:   Útest_get_table_commentð  rì   z-QuotedNameArgumentTest.test_get_table_commentc                 C   rä   r…   )r   r   r7   Úget_check_constraintsrâ   r9   r9   r:   Útest_get_check_constraintsö  rì   z1QuotedNameArgumentTest.test_get_check_constraintsN)r<   r=   r>   Úrun_create_tablesr‹   r?   rS   rÚ   rà   r   rJ   rÕ   rã   ræ   ré   r¯   rë   rŽ   rî   Úunique_constraint_reflectionrð   Úcomment_reflectionrò   Úcheck_constraint_reflectionrô   r9   r9   r9   r:   rÈ   f  s<    
R



rÈ   c              
   C   sŒ   t jd dd„ t jjfdd�}t jtjtjtjdd�}t jtj	tj
tjtjtjtj	tj
B tj	tjB dd�}t jddd	d�}||||| ƒƒƒƒS )
Nc                   S   s   t jS r…   )r   rL   r9   r9   r9   r:   rœ     s    z$_multi_combination.<locals>.<lambda>rI   r–   r.   r•   TFÚ
use_filter)r   r­   rJ   rK   r   ÚDEFAULTÚ	TEMPORARYÚANYr   ÚTABLEÚVIEWÚMATERIALIZED_VIEWÚANY_VIEW)rÙ   rI   r.   r•   Úfilter_namesr9   r9   r:   Ú_multi_combinationý  s2   þúü

ø
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dd„ Zdd„ Zdd„ Zdejejdfdd„Zdejejdfdd„Zdejejdfdd„Zedd„ ƒZdejejdfdd„Zedd„ ƒZdejejdfdd „Zed!d"„ ƒZdejejdfd#d$„Zed%d&„ ƒZdejejdd'fd(d)„Zed*d+„ ƒZdejejdfd,d-„Zed.d/„ ƒZ e!j"j#d0d1„ ƒZ$e!j"j#d2d3„ ƒZ%e!j"j#d4d5„ ƒZ&e!j"j#d6d7„ ƒZ'e!j"j#e!j"j(d8d9„ ƒƒZ)e!j"j#d:d;„ ƒZ*e!j"j#d<d=„ ƒZ+e!j,dd>e!j"j-fd?d@�e!j,de!j"j.fd'dAd@�dBdC„ ƒƒZ/e!j,de!j"j.fd'dAd@�dDdE„ ƒZ0e!j"j1dFdG„ ƒZ2e!j"j3e!j"j4dHdI„ ƒƒZ5e!j"j6dJdK„ ƒZ7e!j"j6e!j"j.dLdM„ ƒƒZ8d¦dNdO„Z9e!j,dPd'de!j"j.fdd'e!j"j3fdde!j"j.e!j"j3 fdQd@�dRdS„ ƒZ:e!j"j;dTdU„ ƒZ<e!j"j;dVdW„ ƒZ=e!j"j;e!j"j>e!j"j4dXdY„ ƒƒƒZ?e!j,dZde!j"j.fdAd@�e!j"j@d[d\„ ƒƒZAe!j,dZde!j"j.fdAd@�e!j"j-d]d^„ ƒƒZBe!j"jCe!j"j.d_d`„ ƒƒZDe!j,dZde!j"j.fdAd@�e!j"jEdadb„ ƒƒZFe!j,dcddded@�e!j"jEe!j"jGe!j"jHdfdg„ ƒƒƒƒZIe!j"j;e!j"jJdhdi„ ƒƒZKe!j"jLdjdk„ ƒZMe!j,de!j"j.fdZdAd@�e!j"jJdldm„ ƒƒZNe!j"j3e!j,dZde!j"j.fdAd@�dndo„ ƒƒZOe!j"j3dpdq„ ƒZPe!j"jQdrds„ ƒZRe!j,de!j"j.fdZdAd@�dtdu„ ƒZSe! ,de!j"j.fd'¡dvdw„ ƒZTe!jUdxdy„ ƒZVe!j"jWeXdzd{„ ƒƒZYe!j"j6eXd|d}„ ƒƒZZd~d„ Z[d§d€d�„Z\d¨d‚dƒ„Z]eXd„d…„ ƒZ^e!j"j@eXd†d‡„ ƒƒZ_dˆd‰„ Z`e!j"j-eXdŠd‹„ ƒƒZae!j"jEeXdŒd�„ ƒƒZbe!j"jJeXdŽd�„ ƒƒZce!j"jdeXd�d‘„ ƒƒZee!j,d’e!j"jWfd“d”e!j"j@fd•e!j"j-fd–e!j"jEfd—e!j"jJfd˜e!j"jdfd™e!j"j6fdšd@�	d›dœ„ ƒZfd�dž„ Zge!j,dd'dAd@�e!j,de!j"jhfd'dŸd@�d d¡„ ƒƒZie!j"j6d¢d£„ ƒZje!j"jkd¤d¥„ ƒZldS )©ÚComponentReflectionTestNTc                 C   s.   |   |d ¡ tjjjr|   |tjj¡ d S d S r…   )Údefine_reflected_tablesr   rJ   rK   r2   r   rL   rQ   r9   r9   r:   rS      s   
ÿz%ComponentReflectionTest.define_tablesc                 C   sª  |r|d }nd}t jjjrtd| dd�f}nd}td|tdtjd	d
�tdt 	d¡dd�tdt 
¡ dd�tdtjg|¢R Ž tjdddd�t d¡|d	d�
}td|tdtjd	d
�tdtjtd| ddd�ƒtdtjtd| ƒƒtdt d¡d	d �tjd!d"d�tjddd#d$d�|d	d�
 td%|tdtjƒtd&tjt|jjƒƒtd't d(¡d	d)�tjdd*d+d�|d	d� td,|td-tjd	d.d/�tdt d(¡d0d1�td2t d(¡d3d1�td4t d5¡d6d1�|d7d8� td9|tdt d(¡ƒ|d:d8� t jjj�rR|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dAtjjj ƒƒtdt d(¡ƒ|d	d� tdB|td-tjd	d
�tdt d(¡ƒ|d	d� t jjj�rµtdC|jj|jjd	d � tdD|jj|jj|jjƒ |�sµtdE|tdFt d¡ƒd	dG�}tdH|td-tjd	d
�tdFt d¡ƒd	dG�}t jjj�rµt jjj�rµtdI|jj ¡ ƒ tdJ|jj ¡ ƒ t jj j�rÁ|  !||¡ |�sÑt jj"j�rÓ|  #|¡ d S d S d S )KNÚ.Ú z%susers.user_idÚ
user_id_fkrÌ   r9   ÚusersÚuser_idTrC   Útest1é   F©ÚnullableÚtest2Úparent_user_idú	test2 > 0Úzz_test2_gt_zeroúusers check constraint©r`   rÍ   útest2 <= 1000©rI   r¶   Ú
dingalingsÚdingaling_idÚ
address_idz%semail_addresses.address_idÚzz_email_add_id_fgúdi fk commentÚid_userrE   é   )Úuniquez$address_id > 0 AND address_id < 1000Úaddress_id_gt_zeroÚzz_dingalings_multipleúdi unique commentÚemail_addressesÚremote_user_idÚemail_addressé   )ÚindexÚemail_ad_pkúea pk commentÚcomment_testrB   ú
id comment)rD   rÍ   údata % comment©rÍ   Úd2ú)Comment types type speedily ' " \ '' Fun!Úd3é*   úComment
withescapesúthe test % ' " \ table comment)rI   rÍ   Úno_constraintsú"no
constraintshasescapedcommentÚlocal_tableÚ	remote_idz%s.remote_table_2.id)r¶   rI   Úremote_tableÚlocal_idz%s.local_table.idÚremote_table_2Úusers_t_idxÚusers_all_idxÚnoncol_idx_test_nopkÚqrµ   Únoncol_idx_test_pkÚnoncol_idx_nopkÚnoncol_idx_pk)$r   rJ   Úself_referential_foreign_keysr2   r   r   r   rc   rd   ÚCHARÚFloatr   rÓ   r   rÒ   r’   r	  rÑ   Úcross_schema_fk_reflectionr   rL   r7   rm   Údefault_schema_namerŽ   r!   r
  r  Úindexes_with_ascdescÚreflect_indexes_with_ascdescr<  ÚdescrÕ   rN   Útemp_table_reflectionrP   )r8   rR   rI   Úschema_prefixÚparent_id_argsr  r;  r=  r9   r9   r:   r  &  s@  

ÿÿýòýý	
ýþüâ 
ÿöýôû

ÿþôÿÿþóú	ÿüû	ÿþÿz/ComponentReflectionTest.define_reflected_tablesc                 C   rX   rY   r[   r]   r9   r9   r:   r^   Ô  r_   z'ComponentReflectionTest.temp_table_namec                 C   s´   t t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i |¤Ž}tjjjrVtjjjrXt |d
tdtj
 ƒ¡ t |dtdƒ¡ d S d S d S )NrB   TrC   r`   rF   r£   Úuser_tmp_uq_rÌ   Úuser_tmp_ixrT   ra   rU   rb   )r   r   r7   r^   r   r   rc   rd   re   rÒ   r\   r!   r   rJ   rM   r2   rf   r   rV   r    rg   r9   r9   r:   rP   Ú  s8   

óòÿþÿÿýôz*ComponentReflectionTest.define_temp_tablesc              
   C   sæ   t jjjr	dh}ntƒ }dD ]b}|}|r|› d|› �}|d }||v r%dnd}d|› d|› d	|› �}t |d
t|ƒ¡ ||v rad}	|rOt  d¡rO|› d|	› �}	d|	› d|› d�}
t |d
t|
ƒ¡ t |dtd|› d|› �ƒ¡ qd S )Nr  ©r  r!  r  r  Ú_vzMATERIALIZED r  zCREATE zVIEW z AS SELECT * FROM rT   Ú	mat_indexÚoraclezCREATE INDEX z ON z(data)rU   zDROP )	r   rJ   Úmaterialized_viewsr2   Úsetr   rV   r    Úagainst)r8   rR   rI   Úmaterializedri   ÚfullnameÚ	view_nameÚprefixrW   Ú
index_namer§   r9   r9   r:   rN   ü  s,   
ÿÿïz$ComponentReflectionTest.define_viewsc                 C   sD   i }t j|v r| |¡ t j|v r| |¡ t j|v r | |¡ |S r…   )r   rý   Úupdaterþ   rÿ   )rp   r•   r¤   rŒ   rT  rß   r9   r9   r:   Ú_resolve_kind  s   





z%ComponentReflectionTest._resolve_kindc                 C   sB   t jjjs| ¡  | ¡  d S t jjjs| |¡ | ¡  d S d S r…   )r   rJ   rÕ   r2   ÚclearrQ  rY  )rp   rŒ   rT  r9   r9   r:   Ú_resolve_views!  s   


þz&ComponentReflectionTest._resolve_viewsc              	      sü   dd„ ‰|t ju rdd„ ‰|t ju rdd„ ‰d ddhtjjddd	d
|  ¡ hi‰tjjj	s>ˆd   
d¡ ˆtjj  ddg¡ tjjj	sLˆd   dd	g¡ tjjj	rVtjjj	saˆd   d
|  ¡ g¡ tjjj	snˆd   d
g¡ ‡ ‡‡‡fdd„| ¡ D ƒ}|S )Nc                 S   s   dS )NTr9   )Ú_r9   r9   r:   rœ   *  s    z8ComponentReflectionTest._resolve_names.<locals>.<lambda>c                 S   s   d| d vS ©NÚtmpr½   r9   ©rš   r9   r9   r:   rœ   ,  ó    c                 S   s   d| d v S r^  r9   r`  r9   r9   r:   rœ   .  ra  r6  r8  r4  r;  r=  rˆ   c                    s>   i | ]\}}ˆ|ƒr|d  ˆˆ vrˆ r|d  ˆ v r||“qS )r½   r9   )Ú.0rš   Úv©r  ÚremovedrI   Úscope_filterr9   r:   Ú
<dictcomp>K  s    ýÿüz:ComponentReflectionTest._resolve_names.<locals>.<dictcomp>)r   rú   rû   r   r   rL   r^   rJ   rC  r2   ÚaddrY  rŽ   rH  Útemp_table_namesrf   Úitems)rp   rI   r.   r  Úvaluesrß   r9   rd  r:   Ú_resolve_names)  sD   

ûþ

ÿ
ÿÿþ
þz&ComponentReflectionTest._resolve_namesc           	      C   sÖ   |dft ji}|dft j|dft j|dft ji}|  ||¡ |dft j|dft j|dft j|dft j|d	ft j|d
ft j|dft j|dft j|dft j|dft j||  ¡ ft ji}|  ||||¡}|  ||||¡}|S )NÚdingalings_vÚemail_addresses_vÚusers_vrˆ   r  r  r!  r(  r2  r4  r6  r8  r;  r=  ©r(   rü   r\  r^   rZ  rl  )	rp   rI   r.   r•   r  rT  rŒ   r¤   rß   r9   r9   r:   Úexp_optionsT  s*   


ý









õz#ComponentReflectionTest.exp_optionsc           
      C   sÈ   dd i}|df|i}|df||df||df|i}|   ||¡ |df||df||df||d	fdd
i|dfddi|df||df||df||df||df|||  ¡ f|i}|  ||||¡}	|  ||||	¡}	|	S )NÚtextrm  rn  ro  rˆ   r  r  r!  r(  r1  r2  r3  r4  r6  r8  r;  r=  )r\  r^   rZ  rl  )
rp   rI   r.   r•   r  ÚemptyrT  rŒ   r¤   rß   r9   r9   r:   Úexp_commentss  s4   ýÿÿñz$ComponentReflectionTest.exp_commentsc           
         s$  dt jd dfdd„‰ ‡ fdd„}|dfˆ dd	t jd
�ˆ dƒˆ dƒˆ dƒgi}|dfˆ dd	t jd
�ˆ dƒˆ dƒg|dfˆ dd	t jd
�ˆ dt jd�ˆ dt jd�ˆ dƒg|dfˆ dd	t jd
�ˆ dƒˆ dƒgi}|  ||¡ |df|dƒˆ ddd�ˆ ddd�ˆ dƒg|df|dƒˆ dƒˆ dƒˆ dƒg|df|dƒˆ dƒˆ dƒg|df|ddd �ˆ dd!d �ˆ d"d#d �ˆ d$d%d �g|d&fˆ dƒg|d'f|dƒˆ dƒˆ d(ƒg|d)f|dƒˆ d*ƒˆ dƒg|d+f|dƒˆ dƒg|d,fˆ d-ƒg|d.f|dƒˆ d-ƒg||  ¡ f|dƒˆ dƒˆ dƒgi}|  ||||¡}	|  ||||	¡}	|	S )/NFTc                 S   s*   | |t j|||dœ}|dkr| d¡ |S )N)r`   ÚautoincrementÚtypeÚdefaultrÍ   r  Úomitru  )r(   rü   Úpop)r`   Úautorw  rÍ   r  rß   r9   r9   r:   rt   ž  s   ú
z0ComponentReflectionTest.exp_columns.<locals>.colc                    s"   dt jddœ|¥}ˆ | fi |¤ŽS )NTF)rz  rw  r  ©r(   rü   )r`   rh   ©rt   r9   r:   Úpk­  s   z/ComponentReflectionTest.exp_columns.<locals>.pkrm  r  rx  )rz  r  r  r  rE   rn  r"  r#  ro  r	  r
  r  r  r  rˆ   rB   r`   r£   r  r  r!  r(  r)  r+  r*  r,  r-  r.  r0  r2  r4  r5  r6  r7  r8  r;  r<  r=  rp  )
rp   rI   r.   r•   r  r}  rT  rŒ   r¤   rß   r9   r|  r:   Úexp_columns—  sŠ   

ÿüÿ	ýüýô

üüý

þ
ù	
ýß'z#ComponentReflectionTest.exp_columnsc                 C   ó   h d£S )N>   r`   rv  rw  r  r9   ©rp   r9   r9   r:   Ú_required_column_keys÷  ó   z-ComponentReflectionTest._required_column_keysc                 C   sH  t jd dœdd„}|d d�}tjjjr|df|dƒi}n|df|i}|df||df||d	f|i}|  ||¡ |d
f|dƒ|df|dƒ|df|dddd�|df|dƒ|df||df|dƒ|df|dƒ|df|dƒ|df||df|dƒ||  ¡ f|dƒi}	tjjjs’|	 	¡ D ]}
|
d d ur‘t j|
d< q„|  
||	||¡}|  ||||¡}|S )Nr  c                 W   s   t |ƒ| |dœS )N)Úconstrained_columnsr`   rÍ   )Úlist)r`   rÍ   Úcolsr9   r9   r:   r}    s   ýz+ComponentReflectionTest.exp_pks.<locals>.pkrÌ   rm  r  rn  ro  rˆ   r  r	  r  r!  r  r&  r'  r(  rB   r2  r4  r6  r8  r;  r=  r`   )r(   rü   r   rJ   Úmaterialized_views_reflect_pkr2   r\  r^   Úreflects_pk_namesrk  rZ  rl  )rp   rI   r.   r•   r  r}  rs  rT  rŒ   r¤   Úvalrß   r9   r9   r:   Úexp_pksû  s@   

ýÿó

€zComponentReflectionTest.exp_pksc                 C   ó   ddhS )Nr`   rƒ  r9   r€  r9   r9   r:   Ú_required_pk_keys+  r‚  z)ComponentReflectionTest._required_pk_keysc                    s˜  G dd„ dƒ‰ |t jd f‡ fdd„	}|dfg i}|dfg |dfg |dfg i}|  ||¡ |d	f|d
gdgd	dd�g|df|dgdgd	ƒ|dgdgdddd�g|df|dgdgd	ƒg|dfg |dfg |df|dgdgdtjd�g|df|dgdgdd d�g|dfg |dfg |d fg ||  ¡ fg i}tjjj	s�||d	f  
¡  tjjj	sº| ¡ D ]}	|	D ]}
|
d! t jur¸t j|
d!< qªq¦|  ||||¡}|  ||||¡}|S )"Nc                   @   ó   e Zd Zdd„ ZdS )z+ComponentReflectionTest.exp_fks.<locals>.ttc                 S   s   |d u p
t jjj|kS r…   )r   r7   rm   rD  ©rp   r¸   r9   r9   r:   Ú__eq__7  s   þz2ComponentReflectionTest.exp_fks.<locals>.tt.__eq__N©r<   r=   r>   rŽ  r9   r9   r9   r:   r“   6  ó    r“   c                    s$   | ||t j|d ur|nˆ ƒ ||dœS )N)rƒ  Úreferred_columnsr`   r/   Úreferred_schemaÚreferred_tablerÍ   r{  )r…  Úref_colÚ	ref_tableÚ
ref_schemar`   rÍ   ©r“   r9   r:   Úfk=  s   	÷z+ComponentReflectionTest.exp_fks.<locals>.fkrm  rn  ro  rˆ   r  r  r	  r  rÌ   r  r  r  r!  r  r  r  r"  r(  r2  r4  r5  rB   r8  )r–  r6  r7  r;  r=  r`   )r(   rü   r\  r   rL   r^   r   rJ   r@  r2   r[  Únamed_constraintsrk  rZ  rl  )rp   rI   r.   r•   r  r˜  rT  rŒ   r¤   Úvalsrˆ  rß   r9   r—  r:   Úexp_fks/  sr   úýÿûþ
ÿüÿÿß
#

€þzComponentReflectionTest.exp_fksc                 C   r  )N>   r`   r“  r’  r‘  rƒ  r9   r€  r9   r9   r:   Ú_required_fk_keys‡  r‚  z)ComponentReflectionTest._required_fk_keysc           
      C   s  dd dddœdd„}|dfg i}|dfg |dfg |dfg i}|   ||¡ |r3||df  |d	d
d�¡ |dfg |dddd�¢|ddddd�¢|ddddd�¢|dfg |d	tjddd�¢|dtjdd�¢|dddddd�¢|dfg |dtjd�¢|dtjdd�¢|d fg |d!fg |d"fg |d#tjdd�¢|d$fg |d%tjdd�¢|d&fg |d'fg |d(d)d(d*id+�¢|d,fg |d(d-d(d*id+�¢||  ¡ fg |d.d/d�¢|d0d1tj› �ddd2�¢i}tjj	j
rátjjj
sñ||d'f  ¡  ||d,f  ¡  |  ||||¡}	|  ||||	¡}	|	S )3NF)r  Úcolumn_sortingÚ
duplicatesr˜  c                    s�   t jj}t jj}t jj}|r|jr|r|jsdS |t|ƒ| tjg dœ}	ˆ r?ˆ |	d< |jr?|	d  |	d< }
‡ fdd„|
D ƒ|	d< |rE| |	d< |	gS )	Nr9   )r  Úcolumn_namesr`   Údialect_optionsÚinclude_columnsr�  rŸ  Úexpressionsc                    s   g | ]
}|ˆ v r
d n|‘qS r…   r9   ©rb  r’   ©r�  r9   r:   Ú
<listcomp>µ  s    ÿzDComponentReflectionTest.exp_indexes.<locals>.idx.<locals>.<listcomp>Úduplicates_constraint)	r   rJ   Úforeign_keys_reflect_as_indexÚ#unique_constraints_reflect_as_indexÚ*reflect_indexes_with_ascdesc_as_expressionr2   r„  r(   rü   )r`   r  r�  rž  r˜  r…  Úfk_reqÚdup_reqÚsorting_expressionrß   Úorigr9   r¤  r:   r§   ˜  s4   ÿ
ÿÿû

ÿz0ComponentReflectionTest.exp_indexes.<locals>.idxrm  rn  ro  rˆ   rE   rO  rÌ   r  r  r  T)r`   r˜  r	  r  r
  r:  r9  )r`   r  r  )r`   r  rž  r  r  r  r  r!  r#  r"  r(  r2  r4  r5  r6  r7  r8  r;  r<  r>  )rG  )r`   r�  r=  r?  r£   rL  r`   rK  )r`   rž  r  )r\  Úextendr(   rü   r^   r   r\   r   rJ   rE  r2   rF  r[  rZ  rl  )
rp   rI   r.   r•   r  r§   rT  rŒ   r¤   rß   r9   r9   r:   Úexp_indexes‘  s¢   
ú%ý
ÿÿþýÿþûýÿþÿÿýÿ
ÿÿ
ÿ
üþÖ5ÿþz#ComponentReflectionTest.exp_indexesc                 C   r  )N>   r`   r  rŸ  r9   r€  r9   r9   r:   Ú_required_index_keys  r‚  z,ComponentReflectionTest._required_index_keysFc                 C   s(  d dd dœdd„}|dfg i}|dfg |dfg |dfg i}|   ||¡ |d	fg |d
ddddd�¢|dfg |dtjtjd�¢|dddddd�¢|dfg |dfg |dfg |dfg |dfg |dfg |dfg |dfg ||  ¡ fg |dd tj› �d!�¢i}	|r‚i |¥|¥|	¥S |  ||	||¡}
|  ||||
¡}
|
S )"NF)Úduplicates_indexÚis_indexrÍ   c                 W   s8   t jj}|r|jsdS t|ƒ| |dœ}|r||d< |gS )Nr9   )rŸ  r`   rÍ   r±  )r   rJ   Ú*unique_index_reflect_as_unique_constraintsr2   r„  )r`   r±  r²  rÍ   r…  Úreqrß   r9   r9   r:   Úuc  s   
ýz+ComponentReflectionTest.exp_ucs.<locals>.ucrm  rn  ro  rˆ   r  r
  r  r9  T)r`   r±  r²  r  rE   )r`   r±  r  r  r  r   )r`   r±  rÍ   r!  r(  r2  r4  r6  r8  r;  r=  r`   rK  rÌ   )r\  r(   rü   r^   r   r\   rZ  rl  )rp   rI   r.   r•   r  Úall_rµ  rT  rŒ   r¤   rß   r9   r9   r:   Úexp_ucs
  sZ   	ÿýûÿ	ÿûþ
ÿä zComponentReflectionTest.exp_ucsc                 C   rŠ  )Nr`   rŸ  r9   r€  r9   r9   r:   Ú_required_unique_cst_keysO  r‚  z1ComponentReflectionTest._required_unique_cst_keysc           
         sö   G dd„ dt ƒ‰ d‡ fdd„	}|dfg i}|dfg |dfg |dfg i}|  ||¡ |d	f|d
tjƒ|dddd�g|df|ddd�g|dfg |dfg |dfg |dfg |dfg |dfg |dfg |dfg ||  ¡ fg i}|  ||||¡}	|  ||||	¡}	|	S )Nc                   @   rŒ  )z+ComponentReflectionTest.exp_ccs.<locals>.ttc                 S   s(   |  ¡  dd¡ dd¡ dd¡}| |v S )Nú(r  ú)ú`)ÚlowerÚreplace)rp   r¸   rß   r9   r9   r:   rŽ  [  s   üz2ComponentReflectionTest.exp_ccs.<locals>.tt.__eq__Nr�  r9   r9   r9   r:   r“   Z  r�  r“   c                    s   ˆ | ƒ||dœS )N)Úsqltextr`   rÍ   r9   )rr  r`   rÍ   r—  r9   r:   Úccd  s   z+ComponentReflectionTest.exp_ccs.<locals>.ccrm  rn  ro  rˆ   r  r  r  r  r  r+  r  z$address_id > 0 and address_id < 1000r  rÌ   r!  r(  r2  r4  r6  r8  r;  r=  r…   )Ústrr\  r(   rü   r^   rZ  rl  )
rp   rI   r.   r•   r  r¿  rT  rŒ   r¤   rß   r9   r—  r:   Úexp_ccsS  sF   
ý
ýþþÿézComponentReflectionTest.exp_ccsc                 C   rŠ  )Nr`   r¾  r9   r€  r9   r9   r:   Ú_required_cc_keys�  r‚  z)ComponentReflectionTest._required_cc_keysc                 C   s    t |ƒ}ttjj| ¡ v ƒ d S r…   )r   r'   r   r   rL   Úget_schema_namesr‚   r9   r9   r:   Útest_get_schema_names‘  s   z-ComponentReflectionTest.test_get_schema_namesc                 C   s,   t |ƒ}t| tjj¡ƒ t| d¡ƒ d S )NÚsa_fake_schema_foo)r   r'   Ú
has_schemar   r   rL   r&   r‚   r9   r9   r:   Útest_has_schema—  s   z'ComponentReflectionTest.test_has_schemac                 C   s8   |j ddttjjid�}t|ƒ}ttjj| ¡ v ƒ dS )z
test #7300r£   Úbar©Úschema_translate_mapN)Úexecution_optionsr#   r   r   rL   r   r'   rÃ  r‚   r9   r9   r:   Ú%test_get_schema_names_w_translate_mapž  s   þÿz=ComponentReflectionTest.test_get_schema_names_w_translate_mapc                 C   sD   |j ddttjjid�}t|ƒ}t| tjj¡ƒ t| d¡ƒ d S )Nr£   rÈ  rÉ  rÅ  )	rË  r#   r   r   rL   r   r'   rÆ  r&   r‚   r9   r9   r:   Útest_has_schema_w_translate_map¬  s   þÿz7ComponentReflectionTest.test_has_schema_w_translate_mapc              
   C   sž   t |ƒ}td| ¡ v ƒ t| d¡ƒ | tdƒ¡ z,td| ¡ v ƒ t| d¡ƒ | ¡  td| ¡ v ƒ t| d¡ƒ W | tdƒ¡ d S | tdƒ¡ w )NÚfoo_barzCREATE SCHEMA foo_barzDROP SCHEMA foo_bar)r   r&   rÃ  rÆ  Úexecuter    rv   r'   r‚   r9   r9   r:   Útest_schema_cache¹  s   "z)ComponentReflectionTest.test_schema_cachec                 C   s$   t  ¡ }t|ƒ t|jdƒsJ ‚d S )NrD  )r   r4   r   Úhasattrrm   )rp   Úenginer9   r9   r:   Útest_dialect_initializeÊ  s   z/ComponentReflectionTest.test_dialect_initializec                 C   s   t |ƒ}t|j|jjƒ d S r…   )r   r   rD  rm   r‚   r9   r9   r:   Útest_get_default_schema_nameÐ  s   z4ComponentReflectionTest.test_get_default_schema_nameÚforeign_keyÚorder_byr–   Ú
use_schemac           	         sŽ   |rt j}nd }h d£‰ t|ƒ}|rdd„ | |¡D ƒ}n| |¡}‡ fdd„|D ƒ}|dkr:g d¢}t||ƒ d S g d¢}tt|ƒ|ƒ d S )N>   r4  r(  r6  r2  r8  r=  r;  c                 S   s   g | ]
}|d  r|d  ‘qS )r   r9   )rb  Úrecr9   r9   r:   r¥  ð  s    ýÿz@ComponentReflectionTest.test_get_table_names.<locals>.<listcomp>c                    s   g | ]}|ˆ vr|‘qS r9   r9   ©rb  Út©Ú_ignore_tablesr9   r:   r¥  ÷  s    rÕ  rM  )r  r!  r  )r   rL   r   Úget_sorted_table_and_fkc_namesÚget_table_namesr   Úsorted)	rp   rƒ   rÖ  r×  rI   rx   r¤   Útable_namesÚanswerr9   rÛ  r:   Útest_get_table_namesÕ  s    	
þ
z,ComponentReflectionTest.test_get_table_namesc                 C   sn   t |ƒ}|r
tj}nd }| |¡}tjjjr*tt	|ƒddgƒ t| 
|¡dgƒ d S g d¢}tt	|ƒ|ƒ d S )Nrn  ro  rm  )rm  rn  ro  )r   r   rL   Úget_view_namesr   rJ   rQ  r2   r   rß  Úget_materialized_view_names)rp   rƒ   r×  rx   rI   rà  rá  r9   r9   r:   Útest_get_view_names   s   

z+ComponentReflectionTest.test_get_view_namesc                 C   s,   t |ƒ}| ¡ }tt|ƒdtj› �gƒ d S rY   )r   Úget_temp_table_namesr   rß  r   r\   ©rp   rƒ   rx   ri  r9   r9   r:   Útest_get_temp_table_names  s   z1ComponentReflectionTest.test_get_temp_table_namesc                 C   s$   t |ƒ}| ¡ }tt|ƒdgƒ d S r‡   )r   Úget_temp_view_namesr   rß  rç  r9   r9   r:   Útest_get_temp_view_names  s   z0ComponentReflectionTest.test_get_temp_view_namesc                 C   s   |   |¡ d S r…   )Ú_test_get_comments©rp   rƒ   r9   r9   r:   Útest_get_comments  s   z)ComponentReflectionTest.test_get_commentsc                 C   s   |   |tjj¡ d S r…   )rë  r   r   rL   rì  r9   r9   r:   Útest_get_comments_with_schema"  s   z5ComponentReflectionTest.test_get_comments_with_schemac                 C   s’   t |ƒ}| j|d�}t|jd|d�||df ƒ t|jd|d�||df ƒ t|jd|d�||df ƒ | jjj}t|j||d�|||f ƒ d S )NrH   r(  r  )r   rt  r   rñ   r¤   r2  r`   )rp   rƒ   rI   rx   ÚexpÚno_cstr9   r9   r:   rë  '  s&   
þ
þ
þ

þz*ComponentReflectionTest._test_get_comments)FFzuse_views,use_schemac                 C   sh  |rt j}nd }| jj| jj}}|rg d¢}nddg}t|ƒ}t|||fƒD ]Š\}	}
|}|j|	|d�}tt	|ƒdkt	|ƒƒ t
|
jƒD ]l\}}t|j|| d ƒ || d j}|j}t|tjjƒrf|j}t d¡rv|tjtjfv rvtj}t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 ‚qDq'd S )N©ro  rn  rm  r  r!  rH   r   r`   rv  rP  z%s(%s), %s(%s)rw  )"r   rL   r¤   r  r!  r   Úziprå   r'   ÚlenÚ	enumerateÚcolumnsr   r`   Ú	__class__rv  rÝ   rc   r   Ú
TypeEnginer   rS  Ú	sql_typesÚDateÚDateTimerR  Ú__mro__Úintersectionr   ÚNumericÚTimer   Ú_BinaryrD   )rp   rƒ   Ú	use_viewsr×  rI   r  Ú	addressesrà  rx   ri   ÚtableÚschema_namer…  Úirt   ÚctypeÚ	ctype_defr9   r9   r:   ræ   ?  sb   
þùÿýñÿï€Øùz(ComponentReflectionTest.test_get_columnsc                 C   s6   |   ¡ }| j| }t|tƒ |d�}| j||dd� d S )Nr»   F)Ústrict_constraints)r^   r¤   r   r   Úassert_tables_equal)rp   rƒ   ri   rj   Úreflected_user_tmpr9   r9   r:   Útest_reflect_table_temp_table‹  s   
ÿ
ÿz5ComponentReflectionTest.test_reflect_table_temp_tablec                 C   sf   |   ¡ }| j| }t|ƒ}| |¡}tt|ƒdkt|ƒƒ t|jƒD ]\}}t|j	|| d ƒ q"d S )Nr   r`   )
r^   r¤   r   rå   r'   ró  rô  rõ  r   r`   )rp   rƒ   ri   rj   rx   r…  r  rt   r9   r9   r:   Útest_get_temp_table_columns—  s   

ÿz3ComponentReflectionTest.test_get_temp_table_columnsc                 C   s.   t |ƒ}| d¡}tdd„ |D ƒg d¢ƒ d S )Nrˆ   c                 S   ó   g | ]}|d  ‘qS rÌ   r9   ©rb  rt   r9   r9   r:   r¥  ¨  ó    zFComponentReflectionTest.test_get_temp_view_columns.<locals>.<listcomp>)rB   r`   r£   )r   rå   r   )rp   rƒ   rx   r…  r9   r9   r:   Útest_get_temp_view_columns¢  s   
z2ComponentReflectionTest.test_get_temp_view_columns)Fc                 C   s  |rt jj}nd }| jj| jj}}t|ƒ}| j|d�}|j|j	|d�}|  
|g|||j	f g| j¡ |j|j	|d�}	|||j	f d }
t|	d |
ƒ t jj ¡ � t|	d dƒ W d   ƒ n1 scw   Y  | jjj	}|  
|j||d�g|||f g| j¡ d S )NrH   rƒ  r`   r&  )r   r   rL   r¤   r  r!  r   r‰  rè   r`   Ú_check_listr‹  r   rJ   r‡  Úfail_ifr2  )rp   rƒ   r×  rI   r  r  rx   rï  Ú
users_consÚ	addr_consÚexp_colsrð  r9   r9   r:   ré   ª  s,   
ÿÿ
ýz.ComponentReflectionTest.test_get_pk_constraintc                 C   s|  |rt j}nd }| jj| jj}}t|ƒ}|}tjjj	rd|j
|j|d�}|d }	tjj ¡ � t|	d dƒ W d   ƒ n1 s@w   Y  t|	d |ƒ t|	d |jƒ t|	d dgƒ t|	d	 d
gƒ |j
|j|d�}
|
d }	tjj ¡ � t|	d d uƒ W d   ƒ n1 s‰w   Y  t|	d |ƒ t|	d |jƒ t|	d dgƒ t|	d	 dgƒ | jjj}t|j
||d�g ƒ d S )NrH   r   r`   r  r’  r“  r‘  r	  rƒ  r  r"  )r   rL   r¤   r  r!  r   r   rJ   r@  r2   rê   r`   r™  r  r   Úimplicitly_named_constraintsr'   r2  )rp   rƒ   r×  rI   r  r  rx   Úexpected_schemaÚusers_fkeysÚfkey1Ú
addr_fkeysrð  r9   r9   r:   rë   Ë  s6   
ÿÿ
z-ComponentReflectionTest.test_get_foreign_keysc           
      C   s  |   d|jj dtjj dtjj ¡\}}}t|ƒ}| |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 }	t|	d d |jjfv ƒ t	|	d |jƒ t	|	d d	gƒ t	|	d
 dgƒ d S )Nz%s.local_tablez%s.remote_tablez%s.remote_table_2r½   r   r’  r“  r‘  rB   rƒ  r5  rH   r7  )r¤   rm   rD  r   r   rL   r   rê   r`   r   ró  r'   )
rp   rƒ   r4  r6  r8  rx   Úlocal_fkeysr  Úremote_fkeysÚfkey2r9   r9   r:   Ú"test_get_inter_schema_foreign_keysõ  s8   



ý
ÿþÿÿz:ComponentReflectionTest.test_get_inter_schema_foreign_keysc                 C   sz   |rt j}nd }t|ƒ}|jd|d�}| j|d�}|  |||df | j¡ | jjj	}|  |j||d�|||f | j¡ d S )Nr  rH   )
r   rL   r   rí   r¯  r  r°  r¤   r2  r`   )rp   rƒ   r×  rI   rx   Úindexesrï  rð  r9   r9   r:   rî     s   ÿ

ýz(ComponentReflectionTest.test_get_indexes)r;  r>  )r=  r?  ztname,ixnamec                 C   s‚   t |ƒ}| |¡}|  ¡ d |f }|  ||| j¡ t|tƒ |d�}tt|j	ƒdƒ t
t|j	ƒd j|ƒ tt|j	ƒd j|ƒ d S )Nr»   r½   r   )r   rí   r¯  r  r°  r   r   r   ró  r  r
   r„  r  r`   )rp   rƒ   ÚtnameÚixnamerx   r  Úexpected_indexesrÚ  r9   r9   r:   Útest_get_noncol_index5  s   	
z-ComponentReflectionTest.test_get_noncol_indexc                 C   sB   t |ƒ}|  ¡ }| |¡}| jdd�d |f }|  ||| j¡ d S )NT)r¶  )r   r^   rï   r·  r  r°  )rp   rƒ   rx   r`   Ú	reflectedrï  r9   r9   r:   Ú&test_get_temp_table_unique_constraintsK  s
   
z>ComponentReflectionTest.test_get_temp_table_unique_constraintsc                 C   sn   t |ƒ}|  ¡ }| |¡}|D ]}| dd ¡ qddgddœg}tjjjr+g |d d< tdd	„ |D ƒ|ƒ d S )
Nr   Fr£   rL  )r  rŸ  r`   r   r¡  c                 S   s   g | ]
}|d  dkr|‘qS )r`   rL  r9   ©rb  r§   r9   r9   r:   r¥  a  r�   zGComponentReflectionTest.test_get_temp_table_indexes.<locals>.<listcomp>)	r   r^   rí   ry  r   rJ   Úindex_reflects_included_columnsr2   r   )rp   rƒ   rx   ri   r  ÚindÚexpectedr9   r9   r:   Útest_get_temp_table_indexesT  s   
ÿ
þz3ComponentReflectionTest.test_get_temp_table_indexesc                 C   sô  |rt j}nd }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�}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t|ƒt|	ƒƒ t||	ƒD ]\}}| dd ¡}|r§|
 |¡ t| dd ¡d ƒ t||ƒ q–tƒ }td|||d�}	dd„ |	jD ƒ}dd„ |	jD ƒ dg¡}| |¡rÜJ ‚|
rét|
|ƒ t|tƒ ƒ | jjj}t|j||d�g ƒ d S )NÚunique_ar™   )r`   rŸ  Úunique_a_b_c)r™   Úbr’   Úunique_c_a_b)r’   r™   r,  Úunique_asc_keyÚascr´   zi.have.dotsr,  zi have spacesr’   r`   ©r´   Útesttblr$  r  rH   rŸ  r±  rÍ   )r¼   rI   c                 S   s   h | ]}|j ’qS r9   rÌ   r%  r9   r9   r:   Ú	<setcomp>°  s    zFComponentReflectionTest.test_get_unique_constraints.<locals>.<setcomp>c                 S   s   h | ]}t |tjƒr|j’qS r9   )rÝ   rc   rÒ   r`   )rb  Úuqr9   r9   r:   r2  ±  s    
ýÿ)r   rL   rß  ÚoperatorÚ
itemgetterr   r   rc   r   r   Úappend_constraintrÒ   ru   r   rï   rR  r   ró  rò  ry  rh  r   r  ÚconstraintsÚ
differencerü  r¤   r2  r`   )rp   rR   rƒ   r×  rI   Úuniquesr  rµ  rx   r#  Únames_that_duplicate_indexr­  ÚreflÚdupeÚreflected_metadataÚ	idx_namesÚuq_namesrð  r9   r9   r:   rð   e  sx   


ú÷
÷ÿ
þ
üþü

z3ComponentReflectionTest.test_get_unique_constraintsc                 C   s@   |rt j}nd }t|ƒ}dD ]}|j||d�}tt|ƒƒ qd S )Nrñ  rH   )r   rL   r   rá   r'   Úbool)rp   rƒ   r×  rI   rx   Úviewrc  r9   r9   r:   rã   ¿  s   þz0ComponentReflectionTest.test_get_view_definitionc                 C   sr   t |ƒ}ttƒ� | d¡ W d   ƒ n1 sw   Y  ttƒ� | d¡ W d   ƒ d S 1 s2w   Y  d S )NÚview_does_not_existr  )r   r   r   rá   r‚   r9   r9   r:   Ú'test_get_view_definition_does_not_existÍ  s   
ÿ
"ÿz?ComponentReflectionTest.test_get_view_definition_does_not_existc                 C   sF   t |ƒ}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.

        ))r  r	  )r!  r  )r  r  c                 S   ó   i | ]}|d  |“qS rÌ   r9   r£  r9   r9   r:   rg  ë  ó    zBComponentReflectionTest.test_autoincrement_col.<locals>.<dictcomp>ru  TN)r   rå   Úget)rp   rƒ   rx   r  Úcnamer…  Úid_r9   r9   r:   Útest_autoincrement_colÕ  s   
ùz.ComponentReflectionTest.test_autoincrement_colc                 C   sš   t tjƒ}|r
tjnd }tjjjr/|jd|d�}t	t
|tƒƒ |jd|d�}t	t
|tƒƒ d S ttƒ� |jd|d�}W d   ƒ d S 1 sFw   Y  d S )Nr  rH   r2  )r   r   r7   rL   r   rJ   rÛ   r2   rÜ   r'   rÝ   r5   r   rÞ   )rp   r×  rx   rI   rß   r9   r9   r:   rà   î  s   


"ÿz.ComponentReflectionTest.test_get_table_optionsc                    sŽ   t tjƒ‰ tjjjr,|rtjnd ‰ˆ jˆd�}‡ ‡fdd„ˆ j	ˆd�D ƒ}t
||ƒ d S ttƒ� ˆ  ¡ }W d   ƒ d S 1 s@w   Y  d S )NrH   c                    s    i | ]}ˆ|fˆ j |ˆd �“qS )rH   )rÜ   )rb  r  ©rx   rI   r9   r:   rg    s    ÿÿzHComponentReflectionTest.test_multi_get_table_options.<locals>.<dictcomp>)r   r   r7   r   rJ   rÛ   r2   rL   Úget_multi_table_optionsrÞ  r   r   rÞ   )rp   r×  rß   rï  r9   rJ  r:   Útest_multi_get_table_optionsÿ  s   


þ

"ÿz4ComponentReflectionTest.test_multi_get_table_optionsc                    s   ‡ fdd„}|S )Nc                    s   t ˆ ƒ}||dƒ ||dœ}| r| ƒ } g }tj|v r!| g d¢¡ tj|v r-| ddg¡ tj|v r9| ddg¡ | r?| |d< |rE||d< || ||| d¡d	�}	|g}
|tjkrf| 	¡ }| 
d
¡ |
 |¡ |tjkry| 	¡ }| 
d¡ |
 |¡ t ˆ ƒ|
|	fS )Nr!  )r.   r•   )r(  r  údoes-not-existrn  rM  rm  rI   r  )rI   r.   r•   r  r.   r•   )r   r   rý   r®  rþ   rÿ   rF  r   rú   Úcopyry  Úappend)rI   r.   r•   rù   Úsingle_reflect_fnÚ
exp_methodrx   rh   r  rï  ÚkwsÚnkw©rƒ   r9   r:   Úprovide_fixture  sD   


ÿ

ü





z>ComponentReflectionTest.get_multi_exp.<locals>.provide_fixturer9   )rp   rƒ   rU  r9   rT  r:   Úget_multi_exp  s   .z%ComponentReflectionTest.get_multi_expc                 C   sL   |||||t j| jƒ\}}}|D ]}	| ¡  |jdi |	¤Ž}
t|
|ƒ qd S ©Nr9   )r   rÜ   rq  rv   rK  r   ©rp   rV  rI   r.   r•   rù   rx   rR  rï  rh   Úresultr9   r9   r:   Ú#test_multi_get_table_options_tablesA  s   
úýz;ComponentReflectionTest.test_multi_get_table_options_tablesc           
      C   sH   |||||t j| jƒ\}}}|D ]}	| ¡  t|jdi |	¤Ž|ƒ qd S rW  )r   rñ   rt  rv   r   Úget_multi_table_comment)
rp   rV  rI   r.   r•   rù   rx   rR  rï  rh   r9   r9   r:   Útest_get_multi_table_commentS  s   
úþz4ComponentReflectionTest.test_get_multi_table_commentc                    sX   dt fdd„‰ t|tƒrt‡ fdd„| ¡ D ƒ||ƒ d S t‡ fdd„|D ƒ||ƒ d S )Nrr  c                 S   s   t  dd| ¡ ¡ S )Nz['\" ]r  )ÚreÚsubr¼  )rr  r9   r9   r:   Ú_cleane  s   z:ComponentReflectionTest._check_expressions.<locals>._cleanc                    s   i | ]	\}}ˆ |ƒ|“qS r9   r9   )rb  Úerc  ©r_  r9   r:   rg  i  ó    z>ComponentReflectionTest._check_expressions.<locals>.<dictcomp>c                    s   g | ]}ˆ |ƒ‘qS r9   r9   )rb  r`  ra  r9   r:   r¥  k  r  z>ComponentReflectionTest._check_expressions.<locals>.<listcomp>)rÀ  rÝ   r5   r   rj  )rp   rY  rï  Úerr_msgr9   ra  r:   Ú_check_expressionsd  s   
"z*ComponentReflectionTest._check_expressionsc           	      C   sº   |d u rt |||ƒ d S t t|ƒt|ƒ|ƒ t||ƒD ]?\}}t|ƒt|ƒB D ]2}||v s5||v rY||v rY|› d|› d|› �}|dv rO|  || || |¡ q't || || |ƒ q'qd S )Nz - )r¢  r�  )r   ró  rò  rR  rd  )	rp   rY  rï  Úreq_keysÚmsgÚrr`  rš   rc  r9   r9   r:   r  m  s   €úÿz#ComponentReflectionTest._check_listc                 C   s\   t t| ¡ ƒt| ¡ ƒƒ |D ]}|| || }}|r#|g|g}}|  ||||¡ qd S r…   )r   rR  Úkeysr  )rp   rY  rï  re  Ú
make_listsrš   rg  r`  r9   r9   r:   Ú_check_table_dict{  s   üz)ComponentReflectionTest._check_table_dictc                 C   óR   |||||t j| jƒ\}}}|D ]}	| ¡  |jdi |	¤Ž}
|  |
|| j¡ qd S rW  )r   rå   r~  rv   Úget_multi_columnsrj  r�  rX  r9   r9   r:   Útest_get_multi_columnsƒ  s   
ú	ýz.ComponentReflectionTest.test_get_multi_columnsc                 C   sV   |||||t j| jƒ\}}}|D ]}	| ¡  |jdi |	¤Ž}
| j|
|| jdd� qd S )NT)ri  r9   )r   rè   r‰  rv   Úget_multi_pk_constraintrj  r‹  rX  r9   r9   r:   Útest_get_multi_pk_constraint•  s   
ú
ÿýz4ComponentReflectionTest.test_get_multi_pk_constraintc                 C   sX   t jjjs(||fD ] }| ¡ D ]}t|ƒdkr&tdd„ |D ƒƒr&|j|d� qq	d S d S )Nr½   c                 s   s$   � | ]}|  d ¡dtjfv V  qdS )r`   N)rF  r(   rü   )rb  rc  r9   r9   r:   Ú	<genexpr>­  s   € 
ÿz7ComponentReflectionTest._adjust_sort.<locals>.<genexpr>r0  )r   rJ   r  r2   rk  ró  ÚanyÚsort)rp   rY  r(  r´   Úobjrˆ  r9   r9   r:   Ú_adjust_sort©  s   
ÿ€üþz$ComponentReflectionTest._adjust_sortc                 C   ód   |||||t j| jƒ\}}}|D ]}	| ¡  |jdi |	¤Ž}
|  |
|dd„ ¡ |  |
|| j¡ qd S )Nc                 S   ó   t | d ƒS )Nrƒ  ©Útuple©Údr9   r9   r:   rœ   Ã  ra  zEComponentReflectionTest.test_get_multi_foreign_keys.<locals>.<lambda>r9   )r   rê   r›  rv   Úget_multi_foreign_keysrt  rj  rœ  rX  r9   r9   r:   Útest_get_multi_foreign_keys²  s    
ú
ÿúz3ComponentReflectionTest.test_get_multi_foreign_keysc                 C   rk  rW  )r   rí   r¯  rv   Úget_multi_indexesrj  r°  rX  r9   r9   r:   Útest_get_multi_indexesÇ  s   
úýz.ComponentReflectionTest.test_get_multi_indexesc                 C   ru  )Nc                 S   rv  )NrŸ  rw  ry  r9   r9   r:   rœ   é  ra  zKComponentReflectionTest.test_get_multi_unique_constraints.<locals>.<lambda>r9   )r   rï   r·  rv   Úget_multi_unique_constraintsrt  rj  r¸  rX  r9   r9   r:   Ú!test_get_multi_unique_constraintsÙ  ó   
úüz9ComponentReflectionTest.test_get_multi_unique_constraintsc                 C   ru  )Nc                 S   rv  ©Nr¾  rw  ry  r9   r9   r:   rœ   ü  ra  zJComponentReflectionTest.test_get_multi_check_constraints.<locals>.<lambda>r9   )r   ró   rÁ  rv   Úget_multi_check_constraintsrt  rj  rÂ  rX  r9   r9   r:   Ú test_get_multi_check_constraintsì  r�  z8ComponentReflectionTest.test_get_multi_check_constraintsrÜ   rå   rè   rê   rí   rï   ró   rñ   Úmethodc                 C   sH   t |ƒ}t||ƒ}ttƒ� |dƒ W d   ƒ d S 1 sw   Y  d S )NÚtable_does_not_exists)r   Úgetattrr   r   )rp   r…  rƒ   rx   r¦   r9   r9   r:   Útest_not_existing_tableÿ  s
   


"ÿz/ComponentReflectionTest.test_not_existing_tablec              	      sš   t j‰ ‡ fdd„}tj t d|¡�2 ttdƒ� t|ƒ t	dt
ƒ ƒd ¡ W d   ƒ n1 s.w   Y  W d   ƒ d S W d   ƒ d S 1 sFw   Y  d S )Nc                     s&   |  di ¡}tdƒ|d< ˆ | i |¤ŽS )NÚunreflectableÚerr)NÚ
some_table)Ú
setdefaultr   )r™   rš   Úur©Úmcr9   r:   Úpatched	  s   z;ComponentReflectionTest.test_unreflectable.<locals>.patchedrl  rŠ  r‹  )r   rl  r(   ÚpatchÚobjectr   r   r   Úreflect_tabler   r   )rp   rƒ   r�  r9   rŽ  r:   Útest_unreflectable	  s   ÿÿÿ"ÿz*ComponentReflectionTest.test_unreflectablerŒ   c                    sž   t ƒ }|rtjnd ‰ |j|ˆ |dd� t|ƒ}| ˆ ¡}|r8|| ˆ ¡7 }z	|| ˆ ¡7 }W n	 ty7   Y nw ˆ rC‡ fdd„|D ƒ}t	t
|jƒt
|ƒƒ d S )NF)rI   rŒ   Úresolve_fksc                    s   g | ]	}ˆ › d |› �‘qS )r  r9   rÙ  rH   r9   r:   r¥  <	  rb  z9ComponentReflectionTest.test_metadata.<locals>.<listcomp>)r   r   rL   Úreflectr   rÞ  rã  rä  rÞ   r   rß  r¤   )rp   rƒ   r×  rŒ   Úmrx   r¤   r9   rH   r:   Útest_metadata*	  s   
ÿz%ComponentReflectionTest.test_metadatac              	   C   s€   t d|tdtdd�tdtdd�dd� | |¡ t|ƒ}| d¡}t|ddiƒ | d¡}d	d
„ |D ƒ}dddœ}t||ƒ d S )NÚunicode_commentsÚunicodeu   Ã©è©¦è›‡áºŸÎ©r+  Úemojiu	   â˜�ï¸�âœ¨u   è©¦è›‡áºŸÎ©âœ¨rr  c                 S   ó   i | ]	}|d  |d “qS r  r9   r£  r9   r9   r:   rg  P	  rb  zAComponentReflectionTest.test_comments_unicode.<locals>.<dictcomp>)rš  r›  ©r   r   r   rÀ   r   rñ   r   rå   )rp   rƒ   rR   rx   Útcr…  Úvaluerï  r9   r9   r:   Útest_comments_unicode?	  s   û



z-ComponentReflectionTest.test_comments_unicodec                 C   sp   t d|tdtdd�dd� | |¡ t|ƒ}| d¡}t|ddiƒ | d¡d }t|d |d	 iddiƒ d S )
Nr™  r›  u&   ðŸ��ðŸ§™ðŸ��ðŸ§™â€�â™‚ï¸�ðŸ§™â€�â™€ï¸�r+  u&   ðŸŽ©ðŸ�°ðŸ�‘ðŸ¤·â€�â™€ï¸�ðŸ¤·â€�â™‚ï¸�rr  r   r`   rÍ   r�  )rp   rƒ   rR   rx   rž  r’   r9   r9   r:   Útest_comments_unicode_fullT	  s   ü

z2ComponentReflectionTest.test_comments_unicode_fullr…   r)   )NF)mr<   r=   r>   Úrun_insertsÚrun_deletesr‹   r?   rS   r  r^   rP   rN   rZ  r\  rl  r   rü   r   rq  rt  r~  Úpropertyr�  r‰  r‹  r›  rœ  r¯  r°  r·  r¸  rÁ  rÂ  r   rJ   Úschema_reflectionrÄ  rÇ  rÌ  rÍ  Úschema_create_deleterÐ  rÓ  rÔ  r­   r¯   rK   râ  rå  ri  rè  rM   rf   rê  r÷   rí  rî  rë  ræ   rH  r
  r  rÕ   r  Ú!primary_key_constraint_reflectionré   rë   rC  r  rŽ   rî   rE  rF  r"  rö   r$  Útemp_table_reflect_indexesr)  rð   rã   rC  Útable_reflectionrI  rà   rL  ÚfixturerV  rÛ   r  rZ  r\  rd  r  rj  rm  ro  rt  r|  r~  r€  rø   r„  rˆ  r”  rŒ   r˜  r   Úcomment_reflection_full_unicoder¡  r9   r9   r9   r:   r    sÞ   

 .

!

-
û!
û&
û`

û0

ûX

ûu

úE

û:







ýÿ#ÿ



ý÷
A


ÿÿ&$ÿý
ÿVÿ


ÿ


1
	

	
þþ
þþ
ë
ÿ
r  c                   @   sh   e Zd ZdZdZejdd„ ƒZejdd„ ƒZdd„ Z	d	d
„ Z
dd„ Zejjdd„ ƒZejjdd„ ƒZdS )ÚTableNoColumnsTest)Úreflect_tables_no_columnsTc                 C   s   t d|ƒ | |¡ d S ©Nrs  )r   rÀ   ©rp   rƒ   rR   r9   r9   r:   Útable_no_columnsj	  s   
z#TableNoColumnsTest.table_no_columnsc                 C   s<   t d|ƒ t |dtdƒ¡ t |dtdƒ¡ | |¡ d S )Nrs  rT   z*CREATE VIEW empty_v AS SELECT * FROM emptyrU   zDROP VIEW IF EXISTS empty_v)r   r   rV   r    rÀ   r¯  r9   r9   r:   Úview_no_columnso	  s   
ý
ÿz"TableNoColumnsTest.view_no_columnsc                 C   ó$   t dtƒ |d�}tt|jƒg ƒ d S )Nrs  r»   ©r   r   r   r„  r’   )rp   rƒ   r°  Út2r9   r9   r:   Útest_reflect_table_no_columns	  s   z0TableNoColumnsTest.test_reflect_table_no_columnsc                 C   s2   t |ƒ}t| d¡g ƒ | ¡ }t|dg iƒ d S )Nrs  r®  )r   r   rå   rl  )rp   rƒ   r°  rx   Úmultir9   r9   r:   Ú!test_get_columns_table_no_columnsƒ	  s   z4TableNoColumnsTest.test_get_columns_table_no_columnsc                 C   s*   t ƒ }| |¡ t|jƒ dg¡sJ ‚d S r®  )r   r–  rR  r¤   rü  )rp   rƒ   r°  r—  r9   r9   r:   Ú"test_reflect_incl_table_no_columns‰	  s   
z5TableNoColumnsTest.test_reflect_incl_table_no_columnsc                 C   r²  )NÚempty_vr»   r³  )rp   rƒ   r±  r´  r9   r9   r:   Útest_reflect_view_no_columnsŽ	  s   z/TableNoColumnsTest.test_reflect_view_no_columnsc                 C   s8   t |ƒ}t| d¡g ƒ |jtjd�}t|dg iƒ d S )Nr¹  )r•   )Nr¹  )r   r   rå   rl  r   rþ   )rp   rƒ   r±  rx   r¶  r9   r9   r:   Ú test_get_columns_view_no_columns“	  s   z3TableNoColumnsTest.test_get_columns_view_no_columnsN)r<   r=   r>   r¬   r‹   r   rª  r°  r±  rµ  r·  r¸  rJ   rŒ   rº  r»  r9   r9   r9   r:   r¬  f	  s    


r¬  c                
   @   sd  e Zd ZdZejddgd�dd„ ƒZe ¡ dd„ ƒZdd	„ Zej	j
d
d„ ƒZej	jejddddd�dd„ ƒƒZej	j
ejddddd�dd„ ƒƒZ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 ),ÚComponentReflectionTestExtraTF)Úparamsc                 C   s   |j rtjS d S r…   )Úparamr   rL   )rp   Úrequestr9   r9   r:   Úuse_schema_fixturež	  s   z/ComponentReflectionTestExtra.use_schema_fixturec                    s   t j‡ ‡‡fdd„ƒ}|S )Nc                 3   s   � ˆt ˆ ƒfV  ˆ ˆ ¡ d S r…   )r   rÀ   )r³   ©rƒ   rR   rÀ  r9   r:   Úgo§	  s   €z:ComponentReflectionTestExtra.inspect_for_table.<locals>.go)Ú
contextlibÚcontextmanager)rp   rR   rƒ   rÀ  rÂ  r9   rÁ  r:   Úinspect_for_table¥	  s   z.ComponentReflectionTestExtra.inspect_for_tablec                    sD   dd„ ‰ t ‡ fdd„|D ƒdd„ d�}t |dd„ d�}t||ƒ d S )	Nc                 S   s   d  t d|  ¡ tj¡¡S )Nú zand|\d|=|a|b|c|or|<|>)Újoinr]  Úfindallr¼  ÚI)r¾  r9   r9   r:   Ú	normalize³	  s   ÿz5ComponentReflectionTestExtra.ck_eq.<locals>.normalizec                    s"   g | ]}|d  ˆ |d ƒdœ‘qS )r`   r¾  ©r`   r¾  r9   )rb  Úitem©rÊ  r9   r:   r¥  ¹	  s    ÿÿz6ComponentReflectionTestExtra.ck_eq.<locals>.<listcomp>c                 S   ó   | d S r‚  r9   ©rÌ  r9   r9   r:   rœ   ½	  ó    z4ComponentReflectionTestExtra.ck_eq.<locals>.<lambda>r0  c                 S   rÎ  r‚  r9   rÏ  r9   r9   r:   rœ   Â	  rÐ  )rß  r   )rp   r#  r(  r9   rÍ  r:   Úck_eq¯	  s   
þûþz"ComponentReflectionTestExtra.ck_eqc              	   C   sb   |dƒ�\}}t d|tdt d¡ƒ|d� W d   ƒ n1 sw   Y  |  |jd|d�g ¡ d S )Nr2  rE   r$  rH   )r   r   rc   r   rÑ  ró   )rp   rR   rÅ  rI   r”   r9   r9   r:   Ú#test_check_constraint_no_constraintÆ	  s   üÿþz@ComponentReflectionTestExtra.test_check_constraint_no_constraintÚ	my_inlineÚMyInlineNÚconstraint_namer–   c                 C   s–   |dƒ�)\}}t d|tdtƒ dd�tdtƒ tjd|d�ƒtdtd	ƒƒ|d
� W d   ƒ n1 s0w   Y  |jd|d
�}|  ||pCtj	ddœg¡ d S )NÚsa_ccrB   TrC   r™   úa > 1 AND a < 5rÌ   rE   rF   rH   úa > 1 and a < 5rË  )
r   r   r   rc   rÓ   r   ró   rÑ  r(   rü   ©rp   rR   rÅ  rÕ  rI   r”   r#  r9   r9   r:   Útest_check_constraint_inlineÕ	  s0   ÿýôÿþÿþz9ComponentReflectionTestExtra.test_check_constraint_inlineÚmy_ck_constÚ	MyCkConstc              	   C   s|   |dƒ�\}}t d|tdtƒ ƒtjd|d�|d� W d   ƒ n1 s#w   Y  |jd|d�}|  ||p6tjddœg¡ d S )NrÖ  r™   za = 1 OR (a > 2 AND a < 5)rÌ   rH   za = 1 or a > 2 and a < 5rË  )	r   r   r   rc   rÓ   ró   rÑ  r(   rü   rÙ  r9   r9   r:   Ú test_check_constraint_standaloneù	  s&   
ÿùÿþÿþz=ComponentReflectionTestExtra.test_check_constraint_standalonec                 C   sâ   |dƒ�I\}}t d|tdtƒ dd�tdtƒ t d¡ƒtdtƒ tjdd	d
�ƒtdtƒ ƒtdtdƒƒtjddd
�tjddd
�tjddd
�|d� W d   ƒ n1 sPw   Y  |jd|d�}|  |dddœd	ddœt	j
ddœg¡ d S )NrÖ  rB   TrC   r™   r×  r,  zb > 1 AND b < 5rÓ  rÌ   r’   rE   rF   Úsome_uqzc > 1 AND c < 5Úcc1Ú	some_c_uqrH   zc > 1 and c < 5rË  zb > 1 and b < 5rØ  )r   r   r   rc   rÓ   r   rÒ   ró   rÑ  r(   rü   )rp   rR   rÅ  rI   r”   r#  r9   r9   r:   Útest_check_constraint_mixed
  s6   ý
ñÿ
ýþz8ComponentReflectionTestExtra.test_check_constraint_mixedc              	      sÒ  t d|tdtdƒƒtdtdƒƒtdtdƒƒƒ}tdt |jj¡|jjt |jj	¡ƒ d‰tdt 
|jjˆ¡ƒ td	|jjƒ | ˆ ¡ tˆ ƒ}d	dgd
i dœg}‡ fdd„}||d ƒ G dd„ dtƒ}G ‡fdd„dtƒ}tjjjr¸dg d¢|dƒd|dƒgd
dœ}	||	ƒ | d|	¡ dd g|dˆ› d�ƒgd
dœ}
||
ƒ | |
¡ t| d¡|ƒ tƒ }t d|ˆ d�}n&tdƒ� t| d¡|ƒ tƒ }t d|ˆ d�}W d   ƒ n1 sÙw   Y  |  ||ˆ jj¡ d S )NrÚ  Úxr  ÚyÚzÚt_idxa°  long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string Ú
t_idx_longÚt_idx_2F)r`   rŸ  r  r   c                    s<   t jjjrg | d< ˆ jj› d�g i| d< d S |  di ¡ d S )Nr¡  Ú_includer   )r   rJ   r&  r2   rÒ  r`   rŒ  )ÚentryrT  r9   r:   ÚcompleteIndexS
  s
   
ÿzYComponentReflectionTestExtra.test_reflect_expression_based_indexes.<locals>.completeIndexr   c                   @   rŒ  )z[ComponentReflectionTestExtra.test_reflect_expression_based_indexes.<locals>.lower_index_strc                 S   s    |  ¡ }d|v od|v pd|v S )Nr¼  râ  rã  ©r¼  )rp   r¸   Úolr9   r9   r:   rŽ  _
  s   zbComponentReflectionTestExtra.test_reflect_expression_based_indexes.<locals>.lower_index_str.__eq__Nr�  r9   r9   r9   r:   Úlower_index_str^
  r�  rí  c                       s   e Zd Z‡ fdd„ZdS )z^ComponentReflectionTestExtra.test_reflect_expression_based_indexes.<locals>.coalesce_index_strc                    s   d|  ¡ v o	ˆ |v S )NÚcoalescerë  r�  ©Úlong_strr9   r:   rŽ  e
  s   zeComponentReflectionTestExtra.test_reflect_expression_based_indexes.<locals>.coalesce_index_str.__eq__Nr�  r9   rï  r9   r:   Úcoalesce_index_strd
  s    rñ  )Nrä  Nzlower(x)zlower(y))r`   rŸ  r¢  r  zcoalesce(x, 'z')r»   z>Skipped unsupported reflection of expression-based index t_idx)r   r   r   r!   r   r¼  r’   râ  rä  rã  rî  rÀ   r   rÀ  r   rJ   Ú reflect_indexes_with_expressionsr2   ÚinsertrO  r   rí   r   r   Ú!compare_table_index_with_expectedrÒ  r`   )rp   rR   rƒ   rÚ  rx   r(  rê  rí  rñ  Ú
expr_indexÚexpr_index_longrÂ   r´  r9   )rƒ   rð  r:   Ú%test_reflect_expression_based_indexes7
  sn   û&
üÿ		
ýø
ÿú
ÿú
ÿ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
|ƒ}| d¡}t|ddgdgdtjdœgƒ t|d	 d
 d|jj  dgƒ t dtƒ |d�}tt|jƒd	 j|jj d dgƒ d S )NrÚ  râ  r  rã  rå  ÚincludeF)r`   rŸ  r¡  r  r   r   r   z
%s_includer»   )r   r   r   r!   r’   râ  r   rÒ  r`   rÀ   r   rí   r   r(   rü   r   r„  r  )rp   rR   rƒ   rÚ  r§   rx   rí   r´  r9   r9   r:   Útest_reflect_covering_index’
  sD   ü

ûÿþ

ÿüÿüz8ComponentReflectionTestExtra.test_reflect_covering_indexc                 G   sB   t d|gdd„ t|ƒD ƒ¢R Ž }| |¡ dd„ t|ƒ d¡D ƒS )NrÚ  c                 S   s   g | ]\}}t d | |ƒ‘qS )zt%dr   )rb  r  Útype_r9   r9   r:   r¥  Á
  ó    zAComponentReflectionTestExtra._type_round_trip.<locals>.<listcomp>c                 S   r  )rv  r9   r£  r9   r9   r:   r¥  Å
  r  )r   rô  ru   r   rå   )rp   rƒ   rR   r   rÚ  r9   r9   r:   Ú_type_round_trip½
  s   þý
z-ComponentReflectionTestExtra._type_round_tripc                 C   sH   |   ||t dd¡¡D ]}t|tjƒsJ ‚t|jdƒ t|jdƒ qd S )Né   r  )rü  rø  rý  rÝ   r   Ú	precisionÚscale©rp   rƒ   rR   Útypr9   r9   r:   Útest_numeric_reflectionÇ
  s   ÿûz4ComponentReflectionTestExtra.test_numeric_reflectionc                 C   s8   |   ||t d¡¡d }t|tjƒsJ ‚t|jdƒ d S )Né4   r   )rü  rø  r   rÝ   r   Úlengthr   r9   r9   r:   Útest_varchar_reflectionÐ
  s   ÿþz4ComponentReflectionTestExtra.test_varchar_reflectionc              	   C   sT   t d|tdtdd�tdtdd�ƒ}| |¡ tdd„ t|ƒ d¡D ƒddd	œƒ d S )
NrÚ  r™   Tr  r,  Fc                 S   rœ  )r`   r  r9   r  r9   r9   r:   rg  â
  s    ÿÿzIComponentReflectionTestExtra.test_nullable_reflection.<locals>.<dictcomp>)r™   r,  )r   r   r   ru   r   r   rå   )rp   rƒ   rR   rÚ  r9   r9   r:   Útest_nullable_reflectionØ
  s   ü
þûz5ComponentReflectionTestExtra.test_nullable_reflectionÚCASCADEzSET NULLz	NO ACTIONÚRESTRICTzexpected,ondelete,onupdatec                    s"  i }|r||d< |r||d< |d u r|}t d|tdtdd�dd� t d|tdtdd�td	tt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
‡ fdd„ˆ D ƒi ƒ | 	d¡d d ‰ t
ˆ |ƒ d S )NÚondeleteÚonupdaterâ  rB   TrC   rµ   r  Úx_idzx.idÚxidrÌ   Útesté
   Úuserr`   rF   Fr  Útidztable.idÚmyfkr   r/   c                    s   i | ]}ˆ | r|ˆ | “qS r9   r9   )rb  rš   ©Úoptsr9   r:   rg  @  rû  zMComponentReflectionTestExtra.test_get_foreign_key_options.<locals>.<dictcomp>)r   r   r   r   r   rc   r¿   rÀ   r   rê   r   )rp   rƒ   rR   r(  r	  r
  r/   rx   r9   r  r:   Útest_get_foreign_key_optionsé
  sT   *üú	ÿÿÿ÷
z9ComponentReflectionTestExtra.test_get_foreign_key_options) r<   r=   r>   r‹   r   rª  rÀ  rÅ  rÑ  rJ   rø   rÒ  Ú"inline_check_constraint_reflectionr­   rÚ  rÝ  rá  Úindexes_with_expressionsr÷  r&  rù  rü  r©  r  r  r  Ú1foreign_key_constraint_option_reflection_ondeleteÚ1foreign_key_constraint_option_reflection_onupdateÚ1fk_constraint_option_reflection_ondelete_noactionÚ1fk_constraint_option_reflection_onupdate_restrictÚ1fk_constraint_option_reflection_ondelete_restrictr  r9   r9   r9   r:   r¼  ›	  s„    

	
ÿ ÿ

Z
*



üüüüüüÛ'r¼  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 )	NrÄ   T©r×   rB   rC   r´  Út1idzt1.id)r   r"   r   r   r   rQ   r9   r9   r:   rS   K  s   
ý
üz NormalizedNameTest.define_tablesc                 C   s~   t ƒ }ttddd�|tjd�}|jd }|jj |jj	¡sJ ‚t ƒ }|j
tjdd„ d� |jd jj |jd jj	¡s=J ‚d S )	Nr´  Tr  r»   rÄ   c                 S   s   |   ¡ dv S )N©rÄ   r´  rë  )r`   r—  r9   r9   r:   rœ   c  ra  zINormalizedNameTest.test_reflect_lowercase_forced_tables.<locals>.<lambda>)Úonly)r   r   r"   r   r7   r¤   r’   r  rÁ   rB   r–  )rp   rÂ   Út2_refÚt1_refÚm3r9   r9   r:   Ú$test_reflect_lowercase_forced_tablesY  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Ù  r9   r9   r:   r¥  h  s
    þz;NormalizedNameTest.test_get_table_names.<locals>.<listcomp>r   r½   )r   r   r7   rÞ  r   Úupperr¼  )rp   Ú
tablenamesr9   r9   r:   râ  g  s
   þz'NormalizedNameTest.test_get_table_namesN)	r<   r=   r>   r¬   r‹   r?   rS   r%  râ  r9   r9   r9   r:   r  G  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 v ƒ t|d d d ƒ t|d d d ƒ d S )	NÚcomputed_default_tablec                 S   rD  rÌ   r9   r£  r9   r9   r:   rg  w  rE  zLComputedReflectionTest.test_computed_col_default_not_set.<locals>.<dictcomp>Ú42Úwith_defaultrw  ÚnormalÚcomputed_col)r   r   r7   rå   r'   r
   )rp   rx   r…  Úcol_datar9   r9   r:   Ú!test_computed_col_default_not_sets  s   

z8ComputedReflectionTest.test_computed_col_default_not_setc                 C   sº   t tjƒ}| d¡}dd„ |D ƒ}dD ]
}td|| vƒ q|d }td|v ƒ td|d v ƒ t|  |d d ¡dƒ td	|d v tjj	j
ƒ tjj	j
r[t|d d	 tjjj
ƒ d S d S )
Nr)  c                 S   rD  rÌ   r9   r£  r9   r9   r:   rg  €  rE  zKComputedReflectionTest.test_get_column_returns_computed.<locals>.<dictcomp>)rB   r,  r+  Úcomputedr-  r¾  ú	normal+42Ú	persisted)r   r   r7   rå   r'   r   rÊ  r   rJ   Ú"computed_columns_reflect_persistedr2   Ú"computed_columns_default_persisted)rp   rx   r…  rE   r´   ÚcompDatar9   r9   r:   Ú test_get_column_returns_computed|  s&   


þ

þÿz7ComputedReflectionTest.test_get_column_returns_computedc                 C   s\   t d|| v ƒ || d }t|  |d ¡|ƒ tjjjr,t d|v ƒ t|d |ƒ d S d S )Nr0  r¾  r2  )r'   r   rÊ  r   rJ   r3  r2   r
   )rp   rE   Úcolumnr¾  r2  r5  r9   r9   r:   Úcheck_column‘  s   
þz#ComputedReflectionTest.check_columnc                 C   st   t tjƒ}| d¡}dd„ |D ƒ}|  |ddtjjj¡ tjj	jr)|  |ddd¡ tjj
jr8|  |d	d
d¡ d S d S )NÚcomputed_column_tablec                 S   rD  rÌ   r9   r£  r9   r9   r:   rg  �  rE  zLComputedReflectionTest.test_get_column_returns_persisted.<locals>.<dictcomp>Úcomputed_no_flagr1  Úcomputed_virtualznormal+2FÚcomputed_storedz	normal-42T)r   r   r7   rå   r8  r   rJ   r4  r2   Úcomputed_columns_virtualÚcomputed_columns_stored©rp   rx   r…  rE   r9   r9   r:   Ú!test_get_column_returns_persisted™  s0   

ü
ü
üÿz8ComputedReflectionTest.test_get_column_returns_persistedc                 C   sz   t tjƒ}|jdtjd�}dd„ |D ƒ}|  |ddtjjj	¡ tjj
j	r,|  |ddd	¡ tjjj	r;|  |d
dd¡ d S d S )Nr9  rH   c                 S   rD  rÌ   r9   r£  r9   r9   r:   rg  »  rE  zXComputedReflectionTest.test_get_column_returns_persisted_with_schema.<locals>.<dictcomp>r:  z	normal/42r;  znormal/2Fr<  z	normal*42T)r   r   r7   rå   rL   r8  r   rJ   r4  r2   r=  r>  r?  r9   r9   r:   Ú-test_get_column_returns_persisted_with_schema´  s4   
ÿü
ü
üÿzDComputedReflectionTest.test_get_column_returns_persisted_with_schemaN)r<   r=   r>   r/  r6  r8  r@  r   rJ   rK   rA  r9   r9   r9   r:   r(  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)Úidentity_columnsr©  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r>t d|tdtƒtdttddd�ƒtj	d� d S d S )NrÄ   r,  Úid1r´  r·   Tr   r   éþÿÿÿr/  é   ©ÚalwaysÚstartÚ	incrementÚminvalueÚmaxvalueÚcycleÚcacher$  )rH  rI  rH   )
r   r   r   r   r   rJ   rK   r2   r   rL   rQ   r9   r9   r:   rS   Ù  s@   üùýý

ûÿz$IdentityReflectionTest.define_tablesc                 C   sØ   t jjjrXd}t|ƒD ]}||vr| |¡ q|rQtt|ƒt|ƒƒ |D ]*}|dkr5t|| || kƒ q$|dv rDt|| || kƒ q$t|| || |ƒ q$d S t||ƒ d S t|d |d ƒ t|d |d ƒ d S )NrG  rK  >   rN  rL  rI  rJ  )	r   rJ   Úidentity_columns_standardr2   r„  ry  r   ró  r'   )rp   rŸ  rï  ÚapproxÚcommon_keysrš   r9   r9   r:   Úcheckû  s$   
	
€úzIdentityReflectionTest.checkc                 C   s  t tjƒ}| d¡| d¡ }|D ]p}|d dkr td|v ƒ q|d dkrQd|v r0t|d ƒ t|d d ƒ td|v ƒ | j|d td	d
d
d
dd	d
d�dd� q|d dkr�d|v rat|d ƒ t|d d ƒ td|v ƒ | j|d tdddddddd�d	d� qd S )NrÄ   r´  r`   r,  ÚidentityrD  ru  rw  Fr½   éÿÿÿrG  T©rP  r·   r   r   rE  r/  rF  )	r   r   r7   rå   r&   r'   r   rR  r5   ©rp   rx   r…  rt   r9   r9   r:   Útest_reflect_identity  sV   
ù	õù	õ€æz,IdentityReflectionTest.test_reflect_identityc                 C   s¢   t tjƒ}|jdtjd�}|D ]?}|d dkrtd|v ƒ q|d dkrNd|v r.t|d ƒ t|d d ƒ td|v ƒ | j|d t	d	d
dddddd�d	d� qd S )NrÄ   rH   r`   r,  rS  rD  ru  rw  Tr$  r½   rT  FrG  rU  )
r   r   r7   rå   rL   r&   r'   r   rR  r5   rV  r9   r9   r:   Útest_reflect_identity_schemaD  s2   
ù	õ€øz3IdentityReflectionTest.test_reflect_identity_schema)r<   r=   r>   r¢  r£  r‹   r¬   r?   rS   rR  rW  r   rJ   rK   rX  r9   r9   r9   r:   rB  Ó  s    
!,rB  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g d¢|jj	|jj
|jjgdd�d dd	�	 d S )NÚtb1rB   Úattrr`   r$  Úpk_tb1rÌ   Tr  Útb2rC   ÚpidÚpattrÚpname©r`  r^  r_  Úfk_tb1_name_id_attr)r   r   r   rø  re   rc   rÑ   r¿   r’   r`   rB   r[  )r8   rR   rZ  r9   r9   r:   rS   c  s2   ø
ý
óz(CompositeKeyReflectionTest.define_tablesc                 C   s0   t |ƒ}| | jjj¡}t| d¡g d¢ƒ d S )Nrƒ  ©r`   rB   r[  )r   rè   r¤   rZ  r`   r   rF  )rp   rƒ   rx   rD   r9   r9   r:   Útest_pk_column_order  s   z/CompositeKeyReflectionTest.test_pk_column_orderc                 C   sZ   t |ƒ}| | jjj¡}tt|ƒdƒ |d }t| d¡g d¢ƒ t| d¡g d¢ƒ d S )Nr½   r   r‘  rc  rƒ  ra  )r   rê   r¤   r]  r`   r   ró  rF  )rp   rƒ   rx   Úforeign_keysr  r9   r9   r:   Útest_fk_column_order†  s   z/CompositeKeyReflectionTest.test_fk_column_orderN)r<   r=   r>   r‹   r?   rS   r   rJ   r§  rd  r¯   rf  r9   r9   r9   r:   rY  `  s    

rY  )r  r¼  r¬  rÈ   r®   r@   r�   r  r(  rB  rY  )DrÃ  r4  r]  r3   rc   r  r   r   r   r   r   r   r	   r
   Ú	provisionr   r   rI   r   r   r   r   r   r   r   r   r   r   r   r   rø  rÒ  r   r   r   Úexcr   r   r    r!   Úsql.elementsr"   Ú
sql.schemar#   r$   r%   r&   r'   r(   rR   r  Ú
TablesTestr*   r@   r�   ÚTestBaser®   rÈ   r  r  r¬  r¼  r  ÚComputedReflectionFixtureTestr(  rB  rY  Ú__all__r9   r9   r9   r:   Ú<module>   s–    M<               Y5   /+a 1