
    {<i                       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d(lm1Z1 dd)lm2Z2 dd*lm3Z3 dd+lm4Z4 d,\  Z5Z6 G d- d.ejn                        Z8 G d/ d0e8      Z9 G d1 d2ejn                        Z: G d3 d4ejv                        Z< G d5 d6ejv                        Z= G d7 d8ejn                        Z>d9 Z? G d: d;e0e8      Z@ G d< d=ejv                        ZA G d> d?e/ejv                        ZB G d@ dAejn                        ZC G dB dCej                        ZE G dD dEejn                        ZF G dF dGejn                        ZGdHZHy)I    N   )config)engines)eq_)eq_regex)expect_raises)expect_raises_message)expect_warnings)fixtures)is_)get_temp_table_name)temp_table_keyword_args)Column)Table   )Boolean)DateTime)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_none)is_true)mockNNc                       e Zd Zed        Zy)OneConnectionTablesTestc                     t         j                  j                  j                  r1ddlm} t        j                  t        |j                  d            S t         j                  S )Nr   )poolclass)	poolclassscope)options)r   requirementsindependent_connectionsenabled
sqlalchemyr1   r   testing_enginedict
StaticPooldb)clsr1   s     m/home/www/utuvibe.miabetepe.com/venv/lib/python3.12/site-packages/sqlalchemy/testing/suite/test_reflection.py
setup_bindz"OneConnectionTablesTest.setup_bind<   sI    
 66>>'))tgF  99    N)__name__
__module____qualname__classmethodr@    rA   r?   r/   r/   ;   s     rA   r/   c                   F   e Zd ZdZdZed        Zed        Zed        Zed        Z	d Z
d Zej                  j                  d	        Zej                  j                  d
        Zej                  j"                  d        Zej                  j&                  d        Zej                  j&                  ej                  j*                  ej                  j,                  d                      Zej                  j"                  ej                  j                  d               Zy)HasTableTestTNc                    t        d|t        dt        d      t        dt        d                   t        j
                  j                  j                  rAt        d|t        dt        d      t        dt        d            t        j                         t        j
                  j                  r| j                  |       t        j
                  j                  j                  r| j                  |       y y )	N
test_tableidTprimary_keydata2   test_table_sschema)r   r   r   r   r   requiresschemasr8   r   test_schemaview_reflectiondefine_viewshas_temp_tabledefine_temp_tablesr>   metadatas     r?   define_tableszHasTableTest.define_tablesP   s    4d366":&		
 ##++tW$7vvbz*)) ++X&**22""8, 3rA   c                    d}t        j                  |dt        |             t        j                  |dt        d             t        j                  j
                  j                  rwdt        j                  dt        j                  d}t        j                  |dt        |             t        j                  |dt        dt        j                  z               y y )	Nz1CREATE VIEW vv AS SELECT id, data FROM test_tableafter_createbefore_dropzDROP VIEW vvCREATE VIEW z.vv AS SELECT id, data FROM z.test_table_szDROP VIEW %s.vv)	r   listenr#   r   rS   rT   r8   r   rU   )r>   r[   querys      r?   rW   zHasTableTest.define_viewsf   s    CX~s5z:X}c..AB##++ &&&&  LL>3u:>LL%););<= ,rA   c                 b    t        t        t        j                  dt        j                         S N	user_tmp_r   r   r=   identr>   s    r?   temp_table_namezHasTableTest.temp_table_name|   %    "FII6<<.9
 	
rA   c                 "   t        t        t        j                        }| j                         }t	        ||t        dt        j                  d      t        dt        j                  d            fi |}t        j                  j                  j                  rwt        j                  j                  j                  rRt        j                  |dt!        dt        j"                  z               t        j                  |dt!        d	             y y y )
NrK   TrL   namerO   r^   =create temporary view user_tmp_v as select * from user_tmp_%sr_   drop view user_tmp_v)r   r   r=   ri   r   r   saINTVARCHARr   rS   rV   r8   temporary_viewsr   ra   r#   rg   r>   r[   kw
table_nameuser_tmps        r?   rY   zHasTableTest.define_temp_tables   s    $VVYY7((*
4T262::b>*	

 
 ,,44  0088LL028,,? LL=#6L2MN 9 5rA   c                    t         j                  j                         5 }t        t         j                  j                  j                  |d             t        t         j                  j                  j                  |d             t        t         j                  j                  j                  |d             d d d        y # 1 sw Y   y xY w)NrJ   rP   nonexistent_table)r   r=   beginr+   dialect	has_tabler)   selfconns     r?   test_has_tablezHasTableTest.test_has_table   s    YY__ 	M$FII%%//lCDVYY&&00~FGVYY&&007JKL	M 	M 	Ms   BCCc                 "   t        t        j                        }t        |j	                  d             t        d|t        dt                    }t        |j	                  d             |j                  t        j                         	 t        |j	                  d             |j                          t        |j	                  d             |j                  t        j                         y # |j                  t        j                         w xY w)NrJ   	new_tablecol)r   r   r=   r+   r{   r   r   r   r)   createclear_cachedrop)r}   r[   inspnts       r?   test_has_table_cachez!HasTableTest.test_has_table_cache   s    vyy!|,-;&*@A,-
		&))	T^^K01DNN;/0GGFIIBGGFIIs   	AC- -!Dc                    t         j                  j                         5 }t        t         j                  j                  j                  |dt         j                               t        t         j                  j                  j                  |dt         j                               t        t         j                  j                  j                  |dt         j                               d d d        y # 1 sw Y   y xY w)NrJ   rQ   rP   rx   )r   r=   ry   r)   rz   r{   rU   r+   r|   s     r?   test_has_table_schemaz"HasTableTest.test_has_table_schema   s    YY__ 	$		!!++,v/A/A , 
 		!!++.1C1C , 
 		!!++-f6H6H , 	 	 	s   C
C22C;c                     t         j                  j                         5 }t        t         j                  j                  j                  |dd             d d d        y # 1 sw Y   y xY w)NrJ   nonexistent_schemarQ   )r   r=   ry   r)   rz   r{   r|   s     r?   !test_has_table_nonexistent_schemaz.HasTableTest.test_has_table_nonexistent_schema   sT    YY__ 	$		!!++,/C , 	 	 	s   6AA'c                 N    t        |      }t        |j                  d             y Nvvr   r+   r{   r}   
connectionr   s      r?   test_has_table_viewz HasTableTest.test_has_table_view   s    z"t$%rA   c                 n    t        |      }| j                         }t        |j                  |             y N)r   ri   r+   r{   )r}   r   r   ri   s       r?   test_has_table_temp_tablez&HasTableTest.test_has_table_temp_table   s+    z"..0/0rA   c                 N    t        |      }t        |j                  d             y N
user_tmp_vr   r   s      r?   test_has_table_temp_viewz%HasTableTest.test_has_table_temp_view   s     z"|,-rA   c                 l    t        |      }t        |j                  dt        j                               y r   )r   r+   r{   r   rU   r   s      r?   test_has_table_view_schemaz'HasTableTest.test_has_table_view_schema   s'     z"tV%7%789rA   )rB   rC   rD   __sparse_driver_backend__run_deletesrE   r\   rW   ri   rY   r   r   r   rS   rT   r   r   viewsr   rX   r   rV   rr   r   r   rF   rA   r?   rH   rH   K   sd    $K- -*  * 
 

 O O0M  $   & & $$1 %1
 $$%%%%. & & %. :  :rA   rH   c                       e Zd ZdZdZed        Z ej                  ddd      Z	d Z
e	d	        Zej                  j                  e	d
               Zy)HasIndexTestT)index_reflectionc                    t        d|t        dt        d      t        dt        d            t        dt        d                  }t	        d|j
                  j                         t        j                  j                  j                  rbt        d|t        dt        d      t        dt        d            t        j                  	      }t	        d
|j
                  j                         y y )NrJ   rK   TrL   rN   rO   data2my_idxrQ   my_idx_s)r   r   r   r   r$   crN   r   rS   rT   r8   r   rU   )r>   r[   tts      r?   r\   zHasIndexTest.define_tables   s    4d366":&7F2J'
 	h		"##++tW$7vvbz*))B *bddii( ,rA   rz   	inspectorkindargnamesc                 B    |dk(  rfdS t              j                  S )Nrz   c                  ^    t        j                  j                  j                  g| i |S r   )r   r=   rz   	has_index)akr~   s     r?   <lambda>z)HasIndexTest._has_index.<locals>.<lambda>   s&    699#4#4#>#>t#Ma#M1#M rA   )r   r   )r}   r   r~   s     `r?   
_has_indexzHasIndexTest._has_index   s!    9MM4=***rA   c           	         | j                  ||      } |dd      sJ  |dd      rJ  |dd      rJ  |dd      rJ  |dd      rJ  |dd      rJ t        d| j                  j                  j                  j
                        }t        d|t        d	t              t        dd	            }|j                  |       |j                  |       	 |d
k(  r0 |dd      rJ  |dd      rJ |j                  j                           |dd      du sJ  |dd      du sJ 	 |j                  |       |j                  |       y # |j                  |       |j                  |       w xY w)NrJ   r   r   rx   nonexistent_idxmy_idx_2test_table_2my_idx_3foor   T)r   r$   tablesrJ   r   r   r   r   r   r   __self__r   r   )r}   r   r   r[   methidxtbls          r?   test_has_indexzHasIndexTest.test_has_index  so   tZ0L(+++j111+X666&7888j111
333J 6 6 8 8 > >?5'"*e$	
 	

:

:		!{"j999
;;;))+j1T999
3t;;;HHZ HHZ  HHZ HHZ s   AE $E)c                     | j                  ||      } |ddt        j                        sJ  |ddt        j                        rJ  |ddt        j                        rJ  |ddt        j                        rJ y )NrJ   r   rQ   r   rx   nonexistent_idx_s)r   r   rU   )r}   r   r   r   s       r?   test_has_index_schemaz"HasIndexTest.test_has_index_schema"  s     tZ0L*V5G5GHHHhv7I7IJJJF4F4F
 	
 
 -f6H6H
 	
 
 
rA   N)rB   rC   rD   r   __requires__rE   r\   r   combinationsr   r   r   rS   rT   r   rF   rA   r?   r   r      sx     $(L) )(  7	;HD+ 
! 
!: 		
 
 	
rA   r   c                   l   e Zd ZdZd Zd Z ej                  dddg       e        e       ej                  j                  d                             Z
 e        e       ej                  j                  d                      Z e        e       ej                  j                  d                      Zy	)
BizarroCharacterTestTc                  6    t        j                  ddddd      S )N)	plainname)z(3))zcol%p)z[brack]
columnnamer   r   r   rF   rA   r?   column_namesz!BizarroCharacterTest.column_names4  s$    ##!
 	
rA   c                  6    t        j                  ddddd      S )N)plain)z(2))z
per % cent)z
[brackets]	tablenamer   r   rF   rA   r?   table_namesz BizarroCharacterTest.table_names=  s$    ## 
 	
rA   use_compositeFc                 `   t        ||t        |t        dd      d      }|r!|j                  t        dt        d             |rt        d|t        dt        d      t        dt              t        d	t              t	        j
                  dd	g|j                  j                  |j                  j                  g      d       nGt        d|t        dt        d      t        dt        |j                  j                              d       |j                  |       t               }t        d||
      }|j                  |   }	|j                  j                  j                  |	j                  d         sJ |r5|j                  j                  j                  |	j                  d         sJ yy)ztests for #10275rK   T)keyrM   test_needs_fkid2rL   otherrefref2autoload_withr      N)r   r   r   append_columnro   ForeignKeyConstraintr   rK   r   r   
create_allr   r   r   
referencesr   )
r}   r   r[   r   r   r   r   m2o2t1s
             r?   test_fk_refz BizarroCharacterTest.test_fk_refF  sW    :wDdC	
 VE7EFtW$7ug&vw'''"$$''244889LM" tW$7uj12" 	J'Z7Bj9YYy!ttxx""2447+++4499''Q000 rA   c           
          t        ||t        |t        t               d             |j	                  |       t        |      }t        |j                  |      d   d   d   d       y )NTrL   r   identitystartr   r   r   r   r   r   r   r   get_columnsr}   r   r   r   r[   r   s         r?   test_reflect_identityz*BizarroCharacterTest.test_reflect_identityu  s`     	:w
E	

 	J'z"DY'*:6w?CrA   c           
          t        ||t        dt        d      t        |t        d             |j                  |       t	        |      }t        |j                  |      d   d   d       y )NrK   TrL   some commentcommentr   r   r   r   r   r   r   r   r   r   s         r?   test_reflect_commentsz*BizarroCharacterTest.test_reflect_comments  sc     	4d3:w?		
 	J'z"DY'*95~FrA   N)rB   rC   rD   r   r   r   r   	variationrS   !foreign_key_constraint_reflectionr   identity_columnsr   comment_reflectionr   rF   rA   r?   r   r   0  s     $

 Wu6^]77)1 8   7)1V ^]&&D '  D ^]((G )  GrA   r   c                       e Zd ZdZdZej                  d        Zej                  j                  d        Z
ej                  j                  d        Zy)TempTableElementsTestT)temp_table_reflectionc                 b    t        t        t        j                  dt        j                         S )N
ident_tmp_rf   r}   s    r?   r   zTempTableElementsTest.tablename  s%    "FIIFLL>:
 	
rA   c           
          t        ||t        dt        t               d             |j	                  |       t        |      }t        |j                  |      d   d   d   d       y )NrK   TrL   r   r   r   r   r   r}   r   r   r[   r   s        r?   r   z+TempTableElementsTest.test_reflect_identity  s^    4(*$?	

 	J'z"DY'*:6w?CrA   c           
          t        ||t        dt        d      t        dt        d             |j                  |       t	        |      }t        |j                  |      d   d   d       y )	NrK   TrL   foobarr   r   r   r   r   r   s        r?   r   z+TempTableElementsTest.test_reflect_comments  sa    4d38Wn=		
 	J'z"DY'*95~FrA   N)rB   rC   rD   r   r   r   fixturer   rS   r   r   temp_table_comment_reflectionr   rF   rA   r?   r   r     sg     $-L__
 

 &&	D '	D 33
G 4
GrA   r   c                      e Zd ZdZdZed        Zd Zed        Zee	j                  j                  d               Zed        Zed        Zee	j                  j                  d	               Zee	j                  j"                  d
               Zee	j                  j&                  d               Zee	j                  j*                  d               Zee	j                  j.                  d               Zy)QuotedNameArgumentTestonceTc                 6   t        d|t        dt              t        dt        d            t        dt        d            t        dt              t	        j
                  dd      t	        j                  d	d      t	        j                  dd
      t	        j                  dgdgd      t	        j                  dd      dd       t        j                  j                  j                  rt        d|t        dt              t        dt        d            t        dt        d            t        dt              t	        j
                  dd      t	        j                  dd      t	        j                  dd      t	        j                  dgdgd      t	        j                  dd      dd       t        d|t        dt        d      t        dt              d       t        j                  j                  j                  rt        j                  j                  j                  rddg}ndg}|D ]  }dt        j                   j"                  j$                  j'                  d|z        dt        j                   j"                  j$                  j'                  |      }t)        j*                  |dt-        |             t)        j*                  |d t-        d!t        j                   j"                  j$                  j'                  d|z        z                y y )"Nquote ' onerK   rl   rO   rN   
related_idzpk quote ' onerl   zix quote ' onezuq quote' onez
related.idzfk quote ' onezname != 'foo'zck quote ' onezquote ' one commentT)r   r   quote " twozpk quote " twozix quote " twozuq quote" twozfk quote " twozck quote " two zquote " two commentrelatedrL   r   r`   view %s AS SELECT * FROM r^   r_   zDROP VIEW %s)r   r   r   r   ro   PrimaryKeyConstraintr$   UniqueConstraintr   CheckConstraintr   rS   symbol_names_w_double_quoter8   view_column_reflectionr   r=   rz   identifier_preparerquoter   ra   r#   )r>   r[   namesrl   rb   s        r?   r\   z$QuotedNameArgumentTest.define_tables  s   4!66":&66":&<)##D/?@HH%v.$ ##-= 5EF.%	
* 77??tW%vvbz*vvbz*|W-''3CD)62##( ''F\N1A ""?9JK2"%* 	4d39g&	
 22::;;CC!! "  II%%99??!D( II%%99??E	 X~s5zB!& ))++??EE%,	 ;rA   c                 n     t        j                  ddt         j                  j                  f      |       S )N)r  r	  )r   r   rS   r  )fns    r?   quote_fixturesz%QuotedNameArgumentTest.quote_fixtures  s:    
w##G,,HHI
  	rA   c                 >   t        t        j                        }t        j                  j
                  j                  r+|j                  |      }t        t        |t                     y t        t              5  |j                  |       d d d        y # 1 sw Y   y xY wr   )r   r   r=   r   rS   reflect_table_optionsr8   get_table_optionsr+   
isinstancer;   r   NotImplementedError)r}   rl   r   ress       r?   test_get_table_optionsz-QuotedNameArgumentTest.test_get_table_options  sp    vyy!1199((.CJsD)*23 -&&t,- - -s   8BBc                 b    t        t        j                        }|j                  d|z        sJ y )Nr  )r   r   r=   get_view_definitionr}   rl   r   s      r?   test_get_view_definitionz/QuotedNameArgumentTest.test_get_view_definition%  s+     vyy!''	D(8999rA   c                 \    t        t        j                        }|j                  |      sJ y r   )r   r   r=   r   r!  s      r?   test_get_columnsz'QuotedNameArgumentTest.test_get_columns+  s$    vyy!%%%rA   c                 \    t        t        j                        }|j                  |      sJ y r   )r   r   r=   get_pk_constraintr!  s      r?   test_get_pk_constraintz-QuotedNameArgumentTest.test_get_pk_constraint0  s$    vyy!%%d+++rA   c                 \    t        t        j                        }|j                  |      sJ y r   )r   r   r=   get_foreign_keysr!  s      r?   test_get_foreign_keysz,QuotedNameArgumentTest.test_get_foreign_keys5  s&     vyy!$$T***rA   c                 \    t        t        j                        }|j                  |      sJ y r   )r   r   r=   get_indexesr!  s      r?   test_get_indexesz'QuotedNameArgumentTest.test_get_indexes;  s&     vyy!%%%rA   c                 \    t        t        j                        }|j                  |      sJ y r   )r   r   r=   get_unique_constraintsr!  s      r?   test_get_unique_constraintsz2QuotedNameArgumentTest.test_get_unique_constraintsA  s&     vyy!**4000rA   c                 \    t        t        j                        }|j                  |      sJ y r   )r   r   r=   get_table_commentr!  s      r?   test_get_table_commentz-QuotedNameArgumentTest.test_get_table_commentG  s&     vyy!%%d+++rA   c                 \    t        t        j                        }|j                  |      sJ y r   )r   r   r=   get_check_constraintsr!  s      r?   test_get_check_constraintsz1QuotedNameArgumentTest.test_get_check_constraintsM  s&     vyy!))$///rA   N)rB   rC   rD   run_create_tablesr   rE   r\   r  r  r   rS   r  r"  r$  r'  r   r*  r   r-  unique_constraint_reflectionr0  r   r3  check_constraint_reflectionr6  rF   rA   r?   r  r    sT    $P Pd - - ,,: - : & & , , 77+ 8 + &&& ' & 221 3 1 ((, ) , 110 2 0rA   r  c           
         t        j                  d d t         j                  j                  fd      }t        j                  t        j
                  t        j                  t        j                  d      }t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  z  t        j                  t        j                  z  d      }t        j                  ddd      } | | | ||                         S )	Nc                  "    t         j                  S r   )r   rU   rF   rA   r?   r   z$_multi_combination.<locals>.<lambda>X  s    F&& rA   rR   r   r4   r   TF
use_filter)r   r   rS   rT   r    DEFAULT	TEMPORARYANYr   TABLEVIEWMATERIALIZED_VIEWANY_VIEW)r  rR   r4   r   filter_namess        r?   _multi_combinationrE  T  s    !!&$$	
 F   	E $$:??*:777	D ''elKL%\"-./00rA   c                      e Zd ZdxZZdZed        Zed        Zed        Z	ed        Z
ed        Zd Zd	 Zd
 Zdej                   ej                   dfdZdej                   ej                   dfdZdej                   ej                   dfdZed        Zdej                   ej                   dfdZed        Zdej                   ej                   dfdZed        Zdej                   ej                   dfdZed        Zdej                   ej                   ddfdZed        Zdej                   ej                   dfdZed        Z e!jD                  jF                  d        Z$e!jD                  jF                  d        Z%e!jD                  jF                  d        Z&e!jD                  jF                  d        Z'e!jD                  jF                  e!jD                  jP                  d               Z)e!jD                  jF                  d        Z*e!jD                  jF                  d         Z+ e!jX                  dd!e!jD                  jZ                  fd"#       e!jX                  de!jD                  j\                  fdd$#      d%               Z/ e!jX                  de!jD                  j\                  fdd$#      d&        Z0e!jD                  jb                  d'        Z2e!jD                  jf                  e!jD                  jh                  d(               Z5e!jD                  jl                  d)        Z7e!jD                  jl                  e!jD                  j\                  d*               Z8dxd+Z9 e!jX                  d,dde!jD                  j\                  fdde!jD                  jf                  fdde!jD                  j\                  e!jD                  jf                  z   fd-#      d.        Z:e!jD                  jv                  d/        Z<e!jD                  jv                  d0        Z=e!jD                  jv                  e!jD                  j|                  e!jD                  jh                  d1                      Z? e!jX                  d2de!jD                  j\                  fd$#      e!jD                  j                  d3               ZA e!jX                  d4d5d6d7d8#      e!jD                  j                  e!jD                  j                  d9                      ZC e!jX                  d2de!jD                  j\                  fd$#      e!jD                  jZ                  d:               ZD e!jX                  d;d<d=d>d?#      e!jD                  jZ                  d@               ZEe!jD                  j                  e!jD                  j\                  dA               ZG e!jX                  d2de!jD                  j\                  fd$#      e!jD                  j                  dB               ZI e!jX                  dCdDdE#      e!jD                  j                  e!jD                  j                  e!jD                  j                  dF                             ZL e!jX                  dGdHdIdJdK#      e!jD                  j                  dL               ZMe!jD                  jv                  e!jD                  j                  dM               ZOe!jD                  j                  dN        ZQ e!jX                  de!jD                  j\                  fd2d$#      e!jD                  j                  dO               ZR e!jX                  dPdQdRdSdT#      e!jD                  j                  dU               ZSe!jD                  jf                   e!jX                  d2de!jD                  j\                  fd$#      dV               ZTe!jD                  jf                  dW        ZUe!jD                  j                  dX        ZW e!jX                  de!jD                  j\                  fd2d$#      dY        ZX e!jX                  de!jD                  j\                  fd      dZ        ZYe!j                  d[        Z[e!jD                  j                  e]d\               Z^e!jD                  jl                  e]d]               Z_d^ Z`dyd_Zadzd`Zbe]da        Zce!jD                  j                  e]db               Zddc Zee!jD                  jZ                  e]dd               Zfe!jD                  j                  e]de               Zge!jD                  j                  e]df               Zhe!jD                  j                  e]dg               Zj e!jX                  dhe!jD                  j                  fdidje!jD                  j                  fdke!jD                  jZ                  fdle!jD                  j                  fdme!jD                  j                  fdne!jD                  j                  fdoe!jD                  jl                  fdp#	      dq        Zkdr Zl e!jX                  ddd$#       e!jX                  de!jD                  j                  fdds#      dt               Zne!jD                  jl                  du        Zoe!jD                  j                  dv        Zqe!jD                  j                  e!jD                  j                  dw               Zty){ComponentReflectionTestNTc                     | j                  |d        t        j                  j                  j                  r+| j                  |t        j
                  j                         y y r   )define_reflected_tablesr   rS   rT   r8   r   rU   rZ   s     r?   r\   z%ComponentReflectionTest.define_tablesw  sF    ##Hd3##++'''..2L2LM ,rA   c                    |r|dz   }nd}t         j                  j                  j                  rt	        d|z  d      f}nd}t        d|t        dt        j                  d	
      t        dt        j                  d      d      t        dt        j                         d      t        dt        j                  g| t        j                  ddd      t        j                  d      |d	
      }t        d|t        dt        j                  d	
      t        dt        j                  t	        d|z  dd            t        dt        j                  t	        d|z              t        dt        j                  d      d	       t        j                  d!d"      t        j                  ddd#d$      |d	
       t        d%|t        dt        j                        t        d&t        j                  t	        |j                  j                               t        d't        j                  d(      d	)      t        j"                  dd*d+      |d	       t        d,|t        d-t        j                  d	d./      t        dt        j                  d(      d01      t        d2t        j                  d(      d31      t        d4t        j                  d5      d61      |d78       t        d9|t        dt        j                  d(            |d:8       t         j                  j$                  j                  re|t        d;|t        d-t        j                  d	
      t        dt        j                  d(            t        d<t	        d=t         j&                  j(                  z              d	t&        j*                  j,                  j.                  >       nt        d?|t        d-t        j                  d	
      t        d@t	        dAt&        j*                  j,                  j.                  z              t        dt        j                  d(            |d	       t        dB|t        d-t        j                  d	
      t        dt        j                  d(            |d	       t         j                  j0                  j                  rt3        dC|j                  j4                  |j                  j6                  d	        t3        dD|j                  j                   |j                  j6                  |j                  j4                         |st        dE|t        dFt        j                  d            d	G      }t        dH|t        d-t        j                  d	
      t        dFt        j                  d            d	G      }t         j                  j8                  j                  rt         j                  j:                  j                  r\t3        dI|j                  j<                  j?                                t3        dJ|j                  j<                  j?                                t         j                  j@                  j                  r| jC                  ||       |s7t         j                  jD                  j                  r| jG                  |       y y y )KN. z%susers.user_id
user_id_fkr  rF   usersuser_idTrL   test1   Fnullabletest2parent_user_id	test2 > 0zz_test2_gt_zerousers check constraintrl   r   test2 <= 1000rR   r   
dingalingsdingaling_id
address_idz%semail_addresses.address_idzz_email_add_id_fgdi fk commentid_userrN      )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_testrK   
id comment)rM   r   data % commentr   d2)Comment types type speedily ' " \ '' Fun!d3*   Comment
withescapesthe test % ' " \ table comment)rR   r   no_constraints"no
constraintshasescapedcommentlocal_table	remote_idz%s.remote_table_2.id)r   rR   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   rS   self_referential_foreign_keysr8   r   r   r   ro   rp   CHARFloatr   r  r   r  r   rO  r  cross_schema_fk_reflectionr   rU   r=   rz   default_schema_namer   r$   rP  rT  indexes_with_ascdescreflect_indexes_with_ascdescr  descr  rW   r   rY   )r>   r[   rR   schema_prefixparent_id_argsrN  r  r  s           r?   rI  z/ComponentReflectionTest.define_reflected_tables}  s4   "SLMM99AA%5LN  N9bff$77BGGAJ77BHHJ7#RZZA.A'0
 /
" 	>2::4@

2]B-+ 

,}<=
 6299R=66) -+	 =	
@ 	<,#RZZEGGOO1LM?BIIbM>##=/ 	
 	4|L6299R=2BC		"H
 420HI9	
 	6299R=)<	
 66>>~!4>6299R=1#"2W^^5O5OO #'!99,,@@ "4>""/$ii//CCD 6299R=1!"& $4>6299R=1!"& ,,44-dK%''-- ',*3		!-"&	($ &+(4>3		!-"&&" $$99AA((EEMM+-A-C-C-E-E-J-J-LM/+=+?+?+A+A+F+F+HI22::Xv.'**@@HH""8, IvrA   c                 b    t        t        t        j                  dt        j                         S rd   rf   rh   s    r?   ri   z'ComponentReflectionTest.temp_table_name+  rj   rA   c                    t        t        t        j                        }| j                         }t	        ||t        dt        j                  d      t        dt        j                  d            t        dt        j                        t        j                  ddt        j                         t        j                  d	d      fi |}t        j                  j                  j                  rwt        j                  j                   j                  rRt#        j$                  |d
t'        dt        j                  z               t#        j$                  |dt'        d             y y y )NrK   TrL   rl   rO   r   user_tmp_uq_r  user_tmp_ixr^   rm   r_   rn   )r   r   r=   ri   r   r   ro   rp   rq   r  rg   r$   r   rS   rV   r8   rr   r   ra   r#   rs   s        r?   rY   z*ComponentReflectionTest.define_temp_tables1  s   $VVYY7((*
4T262::b>*5"&&! |FLL>-JKHH]E*
 
" ,,44  0088LL028,,? LL=#6L2MN 9 5rA   c                    t         j                  j                  j                  rdh}n
t	               }dD ]  }|}|r| d| }|dz   }||v rdnd}d| d| d	| }t        j                  |d
t        |             ||v rId}	|rt        j                  d      r| d|	 }	d|	 d| d}
t        j                  |d
t        |
             t        j                  |dt        d| d|               y )Nr\  rN  rg  r\  rK  _vzMATERIALIZED rL  zCREATE zVIEW r  r^   	mat_indexoraclezCREATE INDEX z ON z(data)r_   zDROP )	r   rS   materialized_viewsr8   setr   ra   r#   against)r>   r[   rR   materializedru   fullname	view_nameprefixrb   
index_namer   s              r?   rW   z$ComponentReflectionTest.define_viewsS  s   ..66(>L5LD 	J!H$XQzl3 4I(2l(B_F&yk1CH:N  LL>3u:>\)(
gooh7$*81ZL!9J%j\i[GX~s3x@LL-uVHE)-M)N#	rA   c                     i }t         j                  |v r|j                  |       t         j                  |v r|j                  |       t         j                  |v r|j                  |       |S r   )r   r@  updaterA  rB  )r}   r   r   r   r  r  s         r?   _resolve_kindz%ComponentReflectionTest._resolve_kindn  sX    t#JJv??d"JJu''4/JJ|$
rA   c                    t         j                  j                  j                  s!|j	                          |j	                          y t         j                  j
                  j                  s"|j                  |       |j	                          y y r   )r   rS   r  r8   clearr  r  )r}   r   r  s      r?   _resolve_viewsz&ComponentReflectionTest._resolve_viewsx  s^    66>> KKM!!44<<LL&  =rA   c           	         d }|t         j                  u rd }|t         j                  u rd }d ddht        j                  j
                  dddd	| j                         hi}t        j                  j                  j                  sB|d    j                  d       |t        j                  j
                     j                  ddg       t        j                  j                  j                  s|d    j                  ddg       t        j                  j                  j                  r$t        j                  j                  j                  s$|d    j                  d	| j                         g       t        j                  j                  j                  s|d    j                  d	g       |j!                         D ci c]#  \  }} ||      r|d
   ||   vr|r|d
   |v r||% }	}}|	S c c}}w )Nc                      y)NTrF   )_s    r?   r   z8ComponentReflectionTest._resolve_names.<locals>.<lambda>  s    rA   c                     d| d   vS Ntmpr   rF   r   s    r?   r   z8ComponentReflectionTest._resolve_names.<locals>.<lambda>  s    U!A$%6 rA   c                     d| d   v S r  rF   r  s    r?   r   z8ComponentReflectionTest._resolve_names.<locals>.<lambda>  s    Uad] rA   r{  r}  ry  r  r  r   r   )r    r=  r>  r   r   rU   ri   rS   r  r8   addr  r   r   temp_table_namesrr   items)
r}   rR   r4   rD  valuesscope_filterremovedr   vr  s
             r?   _resolve_namesz&ComponentReflectionTest._resolve_names  s   %K'''6LK)))2L >#34NN&&&$$$&)	
 ::BBDMm,GNN../66!12 0088DM  ')=>   66>>##44<<DM  ,0D0D0F!GH//77DM  ,0 
1A!GFO+!QqT\%9	 qD
 
 

s   9(G&c                    |dft         j                  i}|dft         j                  |dft         j                  |dft         j                  i}| 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                  |dft         j                  || j                         ft         j                  i}| j	                  ||||      }| j                  ||||      }|S )Ndingalings_vemail_addresses_vusers_vr   rN  r\  rg  rn  rw  ry  r{  r}  r  r  r,   r?  r  ri   r  r  )	r}   rR   r4   r   rD  r  r   r   r  s	            r?   exp_optionsz#ComponentReflectionTest.exp_options  s=     0$((;()488Y\"DHH

 	E<0Wtxx\"DHH&'^$dhh%&]#TXX^$dhh%&+,dhh)*DHHT))+,dhh
   vulC!!&%sC
rA   c                 *   dd i}|df|i}|df||df||df|i}| j                  ||       |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||| j                         f|i}| j                  ||||      }	| j                  ||||	      }	|	S )Ntextr  r  r  r   rN  r\  rg  rn  rv  rw  rx  ry  r{  r}  r  r  )r  ri   r  r  )
r}   rR   r4   r   rD  emptyr  r   r   r  s
             r?   exp_commentsz$ComponentReflectionTest.exp_comments  s     0%8()5Y\"E

 	E<0Wu\"E&'^$=' %&@) ]#U^$e%&+,e)*ET))+,e
"   vulC!!&%sC
rA   c                   
 dt         j                  d dfd

fd}|df 
ddt         j                         
d	       
d
       
d      gi}|df 
d	dt         j                         
d       
d      g|df 
ddt         j                         
dt         j                         
dt         j                         
d      g|df 
ddt         j                         
d       
d      gi}| j                  ||       |df |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#      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|| j                         f |d       
d       
d      gi}| j	                  ||||      }	| j                  ||||	      }	|	S )-NFTc                 `    | |t         j                  |||d}|dk(  r|j                  d       |S )N)rl   autoincrementtypedefaultr   rS  omitr  )r,   r?  pop)rl   autor  r   rS  r  s         r?   r   z0ComponentReflectionTest.exp_columns.<locals>.col  s;     !%""$C v~(JrA   c                 B    dt         j                  dd|} | fi |S )NTF)r  r  rS  r,   r?  )rl   rt   r   s     r?   pkz/ComponentReflectionTest.exp_columns.<locals>.pk  s&    488M"MBt?r?"rA   r  r]  r  )r  rS  r^  ra  rN   r  rh  ri  r  rO  rP  rR  rT  rU  r   rK   rl   r   rN  r\  rg  rn  ro  r   rp  rq  rr  rs  ru  rw  ry  rz  r{  r|  r}  r  r  r  r  )r}   rR   r4   r   rD  r  r  r   r   r  r   s             @r?   exp_columnsz#ComponentReflectionTest.exp_columns  s    dhht		#
 ^$N$((CL!IF	'
 ()LvA$%O$,
 YIFTXX>Gdhh/Gdhh/$%	" \"Dv9FE
%
$ 	E<0W9Ge,Ge,$%	  \">"L!IF	% &'< $%O$*
 ^$4.F$45L D":;' %&V]#bhFS=M%N^$r$xZ#f+&N%&D3v;(?+,s3xj)*RXs3x,@T))+,4FE
/C&
N   vulC!!&%sC
rA   c                 
    h dS )N>   rl   r  r  rS  rF   r   s    r?   _required_column_keysz-ComponentReflectionTest._required_column_keysN  s    66rA   c                    t         j                  d dd} |d       }t        j                  j                  j
                  r|df |d      i}n|df|i}|df||df||df|i}| j                  ||       |d	f |d
      |df |d      |df |ddd      |df |d      |df||df |d      |df |d      |df |d      |df||df |d      || j                         f |d      i}	t        j                  j                  j
                  s.|	j                         D ]  }
|
d   	t         j                  |
d<    | j                  ||	||      }| j                  ||||      }|S )NrY  c                      t        |      | |dS )N)constrained_columnsrl   r   )list)rl   r   colss      r?   r  z+ComponentReflectionTest.exp_pks.<locals>.pkY  s    '+Dz" rA   r  r  r]  r  r  r   rN  rO  r\  rg  r^  rl  rm  rn  rK   rw  ry  r{  r}  r  r  rl   )r,   r?  r   rS   materialized_views_reflect_pkr8   r  ri   reflects_pk_namesr  r  r  )r}   rR   r4   r   rD  r  r  r  r   r   valr  s               r?   exp_pkszComponentReflectionTest.exp_pksR  s     88T 	 99AA#^4b6HIL#^4e<L()5Y\"E

 	E<0Wr)}\"B~$6&'=/* ^$bh%&]#RX^$bh%&4+,e)*BtHT))+,bh
 1199}} +v;*"&((CK+   vulC!!&%sC
rA   c                 
    ddhS )Nrl   r  rF   r   s    r?   _required_pk_keysz)ComponentReflectionTest._required_pk_keys  s    -..rA   c                 T    G d d      |t         j                  d ffd	}|dfg i}|dfg |dfg |dfg i}| j                  ||       |df |d	gd
gdd      g|df |dgd
gd       |dgdg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                        g|df |dgdgdd       g|dfg |dfg |dfg || j                         fg i}t        j                  j                  j                  s||df   j                          t        j                  j                  j                  sE|j                         D ]2  }	|	D ]+  }
|
d    t         j                  ust         j                  |
d <   - 4 | j                  ||||      }| j                  ||||      }|S )!Nc                       e Zd Zd Zy)+ComponentReflectionTest.exp_fks.<locals>.ttc                 \    |d u xs' t         j                  j                  j                  |k(  S r   )r   r=   rz   r  )r}   r   s     r?   __eq__z2ComponentReflectionTest.exp_fks.<locals>.tt.__eq__  s,    TM Fyy((<<ErA   NrB   rC   rD   r  rF   rA   r?   r   r    s    rA   r   c                 F    | ||t         j                  ||n        ||dS )N)r  referred_columnsrl   r5   referred_schemareferred_tabler   r  )r  ref_col	ref_table
ref_schemarl   r   r   s         r?   fkz+ComponentReflectionTest.exp_fks.<locals>.fk  s1     (,$+88","8Jbd"+"
 
rA   r  r  r  r   rN  rU  rO  rM  r  r\  ra  r^  rg  r_  r`  rY  rh  rn  rw  ry  rz  rK   r}  )r  r{  r|  r  r  rl   )r,   r?  r  r   rU   ri   r   rS   r  r8   r  named_constraintsr  r  r  )r}   rR   r4   r   rD  r  r  r   r   valsr  r  r   s               @r?   exp_fkszComponentReflectionTest.exp_fks  s?   	 	 	(  0"5()2Y\"B

 	E<0W$%	{G,O  \"I;W5!N!N%-+	% &'$%	{G<* ^$b%&]# MF$%11	& ^$J<$4H' %&+,b)*BT))+,bC"
F ==EEFG$%++-1199 / /C6{$((2&*hhF//
   vulC!!&%sC
rA   c                 
    h dS )N>   rl   r  r  r  r  rF   r   s    r?   _required_fk_keysz)ComponentReflectionTest._required_fk_keys  s    
 	
rA   c                 ^   dd dddd}|dfg i}|dfg |dfg |dfg i}| j                  ||       |r||df   j                   |dd	
             |dfg  |ddd       |dddd
       |dddd      |dfg  |dt        j                  dd       |dt        j                  d       |ddddd      |dfg  |dt        j                  
       |dt        j                  d      |dfg |d fg |d!fg  |d"t        j                  d      |d#fg  |d$t        j                  d      |d%fg |d&fg  |d'd(d'd)i*      |d+fg  |d'd,d'd)i*      || j	                         fg  |d-d.
       |d/d0t
        j                   dd1      i}t        j                  j                  j                  r$t        j                  j                  j                  s*||d&f   j                          ||d+f   j                          | j                  ||||      }	| j                  ||||	      }	|	S )2NF)rc  column_sorting
duplicatesr  c                    t         j                  j                  }t         j                  j                  }t         j                  j                  }|r|j
                  r|r|j
                  sy|t        |      | t        j                  g d}	|r4||	d<   |j
                  r#|	d   x|	d<   }
|
D cg c]
  }||v rd n| c}|	d<   |r| |	d<   |	gS c c}w )NrF   )rc  r   rl   dialect_optionsinclude_columnsr  r   expressionsduplicates_constraint)	r   rS   foreign_keys_reflect_as_index#unique_constraints_reflect_as_index*reflect_indexes_with_ascdesc_as_expressionr8   r  r,   r?  )rl   rc  r  r  r  r  fk_reqdup_reqsorting_expressionr  origr   s               r?   r   z0ComponentReflectionTest.exp_indexes.<locals>.idx  s     %%CCF&&JJG  KK  6>>7??  $T
#'88#%C (6$%%--03N0CCC&DH+?@^ 3:+C' /3+,5L+s   ,Cr  r  r  r   rN   r  r  rN  rU  rM  T)rl   r  rO  rT  rP  r  r~  )rl   rc  r\  )rl   rc  r  ra  r^  r]  re  rg  ri  rh  rn  rw  ry  rz  r{  r|  r}  r  r  r  )r  )rl   r  r  r  r   r  rl   r  )rl   r  rc  )r  extendr,   r?  ri   r   rg   r   rS   r  r8   r  r  r  r  )
r}   rR   r4   r   rD  r   r  r   r   r  s
             r?   exp_indexesz#ComponentReflectionTest.exp_indexes  s    #	J  0"5()2Y\"B

 	E<0&.1299F- W  %LTB YG  WgM$G 
 \" 
%V$((4DI
%YTXX$7
%  "1#
% &' *_4884*%DHH>* ^$b%&]# &[txxD9& ^$ 'Zdhh48' %&+, /*$'#3/ )* -osI>N-
 T))+, /U//'~6#	/U3
j   55==##@@HHF234::<F01288:  vulC!!&%sC
rA   c                 
    h dS )N>   rl   rc  r   rF   r   s    r?   _required_index_keysz,ComponentReflectionTest._required_index_keys]  s    11rA   Fc                    d dd dd}|dfg i}|dfg |dfg |dfg i}| j                  ||       |dfg  |d	d
ddd      |dfg  |dt        j                  t        j                         |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 || j                         fg  |ddt        j
                          i}	|ri |||	S | j                  ||	||      }
| j                  ||||
      }
|
S )!NF)duplicates_indexis_indexr   c                     t         j                  j                  }|r|j                  syt	        |      | |d}|r||d<   |gS )NrF   )r   rl   r   r   )r   rS   *unique_index_reflect_as_unique_constraintsr8   r  )rl   r   r  r   r  reqr  s          r?   ucz+ComponentReflectionTest.exp_ucs.<locals>.uci  sL     ""MMC $T
"C
  *:&'5LrA   r  r  r  r   rN  rP  rT  r~  T)rl   r   r  r\  rN   )rl   r   r^  r]  re  rf  )rl   r   r   rg  rn  rw  ry  r{  r}  r  r  rl   r  r  )r  r,   r?  ri   r   rg   r  r  )r}   rR   r4   r   rD  all_r  r  r   r   r  s              r?   exp_ucszComponentReflectionTest.exp_ucsa  s    +/	  0"5()2Y\"B

 	E<0W  &%2!  \" 	%FDHHE	% "1%=/	% &'^$b%&]#R^$b%&+,b)*BT))+, /F<~!>?/9
@ 6l6e6v66$$T65,GC%%fe\3GCJrA   c                 
    ddhS )Nrl   r   rF   r   s    r?   _required_unique_cst_keysz1ComponentReflectionTest._required_unique_cst_keys  s    ''rA   c                   
  G d dt               
d
fd	}|dfg i}|dfg |dfg |dfg i}| j                  ||       |df |d	t        j                         |d
dd      g|df |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 || j	                         fg i}| j                  ||||      }	| j                  ||||	      }	|	S )Nc                       e Zd Zd Zy)+ComponentReflectionTest.exp_ccs.<locals>.ttc                     |j                         j                  dd      j                  dd      j                  dd      }| |v S )N(rL  )`)lowerreplace)r}   r   r  s      r?   r  z2ComponentReflectionTest.exp_ccs.<locals>.tt.__eq__  s@    KKMWS"%WS"%WS"%	  s{"rA   Nr  rF   rA   r?   r   r    s    #rA   r   c                      |       ||dS )N)sqltextrl   r   rF   )r  rl   r   r   s      r?   ccz+ComponentReflectionTest.exp_ccs.<locals>.cc  s    !$x'JJrA   r  r  r  r   rN  rZ  rV  rW  rX  r   r\  z$address_id > 0 and address_id < 1000rd  r  rg  rn  rw  ry  r{  r}  r  r  r   )strr  r,   r?  ri   r  r  )r}   rR   r4   r   rD  r  r  r   r   r  r   s             @r?   exp_ccszComponentReflectionTest.exp_ccs  sK   	# 	#	K
  0"5()2Y\"B

 	E<0W?DHH-&4  \":-% &'^$b%&]#R^$b%&+,b)*BT))+,b/
2   vulC!!&%sC
rA   c                 
    ddhS )Nrl   r  rF   r   s    r?   _required_cc_keysz)ComponentReflectionTest._required_cc_keys  s    	""rA   c                     t        |      }t        t        j                  j                  |j                         v        y r   )r   r+   r   r   rU   get_schema_namesr   s      r?   test_get_schema_namesz-ComponentReflectionTest.test_get_schema_names  s,    z"**d.C.C.EEFrA   c                     t        |      }t        |j                  t        j                  j
                               t        |j                  d             y )Nsa_fake_schema_foo)r   r+   
has_schemar   r   rU   r)   r   s      r?   test_has_schemaz'ComponentReflectionTest.test_has_schema  s9    z" : :;<!567rA   c                     |j                  ddt        t        j                  j                  i      }t        |      }t        t        j                  j                  |j                         v        y)z
test #7300r   barschema_translate_mapN)execution_optionsr&   r   r   rU   r   r+   r  r   s      r?   %test_get_schema_names_w_translate_mapz=ComponentReflectionTest.test_get_schema_names_w_translate_map  s^      11ugnn88" 2 

 z"**d.C.C.EEFrA   c                    |j                  ddt        t        j                  j                  i      }t        |      }t        |j                  t        j                  j                               t        |j                  d             y )Nr   r"  r#  r  )	r%  r&   r   r   rU   r   r+   r  r)   r   s      r?   test_has_schema_w_translate_mapz7ComponentReflectionTest.test_has_schema_w_translate_map  si    11ugnn88" 2 

 z" : :;<!567rA   c                     t        |      }t        d|j                         v        t        |j                  d             |j	                  t        d             	 t        d|j                         v        t        |j                  d             |j                          t        d|j                         v        t        |j                  d             |j	                  t        d             y # |j	                  t        d             w xY w)Nfoo_barzCREATE SCHEMA foo_barzDROP SCHEMA foo_bar)r   r)   r  r  executer#   r   r+   r   s      r?   test_schema_cachez)ComponentReflectionTest.test_schema_cache  s     z"d33556+,3678	;Y$"7"7"99:T__Y/0I!6!6!889DOOI./s#89:Js#89:s   A:C1 1Dc                 r    t        j                         }t        |       t        |j                  d      sJ y )Nr  )r   r:   r   hasattrrz   )r}   engines     r?   test_dialect_initializez/ComponentReflectionTest.test_dialect_initialize!  s,    '')v~~'<===rA   c                 n    t        |      }t        |j                  |j                  j                         y r   )r   r   r  rz   r   s      r?   test_get_default_schema_namez4ComponentReflectionTest.test_get_default_schema_name'  s(    z"D$$j&8&8&L&LMrA   foreign_keyorder_byr   
use_schemac                 Z   |rt         j                  }nd }h d}t        |      }|r'|j                  |      D cg c]  }|d   r|d    }}n|j	                  |      }|D 	cg c]	  }	|	|vs|	 }
}	|dk(  rg d}t        |
|       y g d}t        t        |
      |       y c c}w c c}	w )N>   ry  rn  r{  rw  r}  r  r  r   r3  r  )r\  rg  rN  )r   rU   r   get_sorted_table_and_fkc_namesget_table_namesr   sorted)r}   r   r4  r5  rR   _ignore_tablesr   recr   tr   answers               r?   test_get_table_namesz,ComponentReflectionTest.test_get_table_names,  s     ''FF
 z"  >>vFq6 AF  ))&1F"(DQA^,CqDD}$?FV$?F{#V, Es   B##	B(-B(c                 H   t        |      }|rt        j                  }nd }|j                  |      }t        j
                  j                  j                  r4t        t        |      ddg       t        |j                  |      dg       y g d}t        t        |      |       y )Nr  r  r  )r  r  r  )r   r   rU   get_view_namesr   rS   r  r8   r   r9  get_materialized_view_names)r}   r   r5  r   rR   r   r=  s          r?   test_get_view_namesz+ComponentReflectionTest.test_get_view_namesW  s     z"''FF))&1..66{#&99%EF008>:JKEF{#V,rA   c                     t        |      }|j                         }t        t        |      dt        j
                   g       y rd   )r   get_temp_table_namesr   r9  r   rg   r}   r   r   r  s       r?   test_get_temp_table_namesz1ComponentReflectionTest.test_get_temp_table_namesh  s9    z"446F#$6<<.'A&BCrA   c                 f    t        |      }|j                         }t        t        |      dg       y r   )r   get_temp_view_namesr   r9  rE  s       r?   test_get_temp_view_namesz0ComponentReflectionTest.test_get_temp_view_namesn  s/     z"335F#$|n5rA   c                 &    | j                  |       y r   )_test_get_commentsr}   r   s     r?   test_get_commentsz)ComponentReflectionTest.test_get_commentsu  s    
+rA   c                 X    | j                  |t        j                  j                         y r   )rK  r   r   rU   rL  s     r?   test_get_comments_with_schemaz5ComponentReflectionTest.test_get_comments_with_schemay  s     	
GNN,F,FGrA   c                    t        |      }| j                  |      }t        |j                  d|      ||df          t        |j                  d|      ||df          t        |j                  d|      ||df          | j                  j
                  j                  }t        |j                  ||      |||f          y )NrQ   rn  rN  )r   r  r   r2  r   rw  rl   )r}   r   rR   r   expno_csts         r?   rK  z*ComponentReflectionTest._test_get_comments~  s    z"v."">&"A()	

 	""76":!"	

 	"">&"A()	

 ++00""6&"9 !	
rA   )FFzuse_views,use_schemac                    |rt         j                  }nd }| j                  j                  | j                  j                  }}|rg d}nddg}t        |      }t        |||f      D ]  \  }	}
|}|j                  |	|      }t        t        |      dkD  t        |             t        |
j                        D ]  \  }}t        |j                  ||   d          ||   d   j                  }|j                  }t!        |t"        j$                  j&                        r|j                  }t)        j*                  d      r2|t,        j.                  t,        j0                  fv rt,        j.                  }t        t        t3        |j4                        j7                  |j4                        j7                  t,        j8                  t,        j:                  t,        j0                  t,        j.                  t,        j<                  t,        j>                  t,        j@                  g            dkD  |j                  d	|j                  d
||   d   d	|d       |jB                  r||   d   J  	 y )Nr  r  r  rN  rg  rQ   r   rl   r  r  r  z), r  r  )"r   rU   r   rN  rg  r   zipr   r+   len	enumeratecolumnsr   rl   	__class__r  r  ro   r   
TypeEnginer   r  	sql_typesDater   r  __mro__intersectionr   NumericTimer   _BinaryrM   )r}   r   	use_viewsr5  rR   rN  	addressesr   r   ru   tableschema_namer  ir   ctype	ctype_defs                    r?   r$  z(ComponentReflectionTest.test_get_columns  s    ''FF KK--t{{/J/JyJK"$56Kz"!$[5)2D!E /	6J K##J{#CDCIM3t9- $EMM2 (63CHHd1gfo.Q11HH	i)<)<= ) 3 3I ??8,NN&&? 2 !*I
 EMM*%i&7&78% ) 1 1 ) 1 1 ) 2 2 ) ) ) 0 0 ) 1 1
 " xx476?EC#* 79-555Q(6/	6rA   c                     | j                         }| j                  |   }t        |t               |      }| j	                  ||d       y )Nr   F)strict_constraints)ri   r   r   r   assert_tables_equal)r}   r   ru   rv   reflected_user_tmps        r?   test_reflect_table_temp_tablez5ComponentReflectionTest.test_reflect_table_temp_table  sO    ))+
;;z*"
*
 	  (U 	! 	
rA   c                 .   | j                         }| j                  |   }t        |      }|j                  |      }t	        t        |      dkD  t        |             t        |j                        D ]!  \  }}t        |j                  ||   d          # y )Nr   rl   )
ri   r   r   r   r+   rV  rW  rX  r   rl   )r}   r   ru   rv   r   r  rf  r   s           r?   test_get_temp_table_columnsz3ComponentReflectionTest.test_get_temp_table_columns  s    ))+
;;z*z"
+D	As4y) 0 01 	+FAs$q'&/*	+rA   c                     t        |      }|j                  d      }t        |D cg c]  }|d   	 c}g d       y c c}w )Nr   rl   )rK   rl   r   )r   r   r   )r}   r   r   r  r   s        r?   test_get_temp_view_columnsz2ComponentReflectionTest.test_get_temp_view_columns  s;     z"-D)SS[)+@A)s   =)Fc                 ,   |rt         j                  j                  }nd }| j                  j                  | j                  j
                  }}t        |      }| j                  |      }|j                  |j                  |      }| j                  |g|||j                  f   g| j                         |j                  |j                  |      }	|||j                  f   d   }
t        |	d   |
       t         j                  j                  j                         5  t        |	d   d       d d d        | j                  j                   j                  }| j                  |j                  ||      g|||f   g| j                         y # 1 sw Y   _xY w)NrQ   r  rl   rl  )r   r   rU   r   rN  rg  r   r  r&  rl   _check_listr  r   rS   r  fail_ifrw  )r}   r   r5  rR   rN  rc  r   rQ  
users_cons	addr_consexp_colsrR  s               r?   r'  z.ComponentReflectionTest.test_get_pk_constraint  sm   
 ^^//FF;;,,dkk.I.Iyz"ll&l)++EJJv+F
L3

345t7M7M	
 **9>>&*I		/01FGI+,h7//779 	2	&!=1	2 ++00##F6#:;&&!"#""	
		2 	2s   F

FPK_test_tablepk_test_tablemixedCasePKzpk.with.dotspk_namec                 &   t        d|t        dt              t        dt        d            t	        j
                  d|             |j                  |       t        |      }|j                  d      }t        |d   |       t        |d   dg       y)	zZTest that primary key constraint names with various casing are
        properly reflected.rJ   rK   rN   rO   r  rl   r  N)
r   r   r   r   ro   r  r   r   r&  r   )r}   r   r[   r{  r   pk_conss         r?   "test_get_pk_constraint_quoted_namez:ComponentReflectionTest.test_get_pk_constraint_quoted_name"  s     	4!66":&##Dw7	
 	J'z"((6GFOW%G)*TF3rA   c                 >   |rt         j                  }nd }| j                  j                  | j                  j                  }}t        |      }|}t        j                  j                  j                  r|j                  |j                  |      }|d   }	t        j                  j                  j                         5  t        |	d   d       d d d        t        |	d   |       t        |	d   |j                         t        |	d   dg       t        |	d	   d
g       |j                  |j                  |      }
|
d   }	t        j                  j                  j                         5  t!        |	d   d u       d d d        t        |	d   |       t        |	d   |j                         t        |	d   dg       t        |	d	   dg       | j                  j"                  j                  }t        |j                  ||      g        y # 1 sw Y   ;xY w# 1 sw Y   xY w)NrQ   r   rl   rM  r  r  r  rO  r  rU  rh  )r   rU   r   rN  rg  r   r   rS   r  r8   r)  rl   r  rt  r   implicitly_named_constraintsr+   rw  )r}   r   r5  rR   rN  rc  r   expected_schemausers_fkeysfkey1
addr_fkeysrR  s               r?   r*  z-ComponentReflectionTest.test_get_foreign_keysA  s   
 ''FF KK--t{{/J/Jyz"  99AA//

6/JKNE!!33;;= 1E&M<01 '(/:&'4()I;7+,/?.@A **9>>&*I
1::BBD 	/E&M-.	/ 	E#$o6E"#UZZ0E$%	{3E'(+;*<=++00D!!&!8"=+1 1	/ 	/s   =H'HHHFK_users_idfk_users_idmixedCaseNamezfk.with.dotsfk_namec                 T   t        d|t        dt        d      d       t        d|t        dt        d      t        dt              t        j                  dgdg|	      d       |j                  |       t        |      }|j                  d      }t        t        |      d
       |d   }t        j                  j                  j                         5  t        |d   |       ddd       t        |d   d       t        |d   dg       t        |d   dg       y# 1 sw Y   9xY w)zZTest that foreign key constraint names with various casing are
        properly reflected.	users_refrO  TrL   r   user_ordersorder_idzusers_ref.user_idr  r   r   rl   Nr  r  r  )r   r   r   ro   r   r   r   r)  r   rV  r   rS   r  rt  )r}   r   r[   r  r   fkeysfkeys          r?   !test_get_foreign_keys_quoted_namez9ComponentReflectionTest.test_get_foreign_keys_quoted_namek  s    	9g48		
 	:wD99g&##$%
 	
 	J'z"%%m4CJQx//779 	'Vg&	' 	D!"K0D#$yk2D&')5	' 	's   DD'c                 h   | j                  d|j                  j                  z  dt        j                  j
                  z  dt        j                  j
                  z        \  }}}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
                        }t        t        |      d       |d   }	t        |	d   d |j                  j                  fv        t        |	d   |j                         t        |	d   d	g       t        |	d
   dg       y )Nz%s.local_tablez%s.remote_tablez%s.remote_table_2r   r   r  r  r  rK   r  rz  rQ   r|  )r   rz   r  r   r   rU   r   r)  rl   r   rV  r+   )
r}   r   ry  r{  r}  r   local_fkeysr  remote_fkeysfkey2s
             r?   "test_get_inter_schema_foreign_keysz:ComponentReflectionTest.test_get_inter_schema_foreign_keys  s    59KKz11EEE : ::'.."<"<<5
1\> z"++K,<,<=Ca AE#$gnn&@&@AE"#^%8%89E$%v.E'(;-8,,gnn&@&@ - 
 	Cq!Q#$""66	
 	E"#[%5%56E$%v.E'(:,7rA   c                 x   |rt         j                  }nd }t        |      }|j                  d|      }| j	                  |      }| j                  |||df   | j                         | j                  j                  j                  }| j                  |j                  ||      |||f   | j                         y )NrN  rQ   )
r   rU   r   r,  r  rs  r  r   rw  rl   )r}   r   r5  rR   r   indexesrQ  rR  s           r?   r-  z(ComponentReflectionTest.test_get_indexes  s    
 ''FF z"""76":f-S&'*+T-F-F	
 ++00VF3 !%%	
rA   )r  r  )r  r  ztname,ixnamec                    t        |      }|j                  |      }| j                         d |f   }| j                  ||| j                         t        |t               |      }t        t        |j                        d       t        t        |j                        d   j                  |       t        t        |j                        d   j                  |       y )Nr   r   r   )r   r,  r  rs  r  r   r   r   rV  r  r   r  rd  rl   )r}   r   tnameixnamer   r  expected_indexesr<  s           r?   test_get_noncol_indexz-ComponentReflectionTest.test_get_noncol_index  s     z"""5)  ++-tUm<"2D4M4MN%:>C		NADOA$$a(DOA##V,rA   IX_test_dataix_test_datamixedCaseIndexzix.with.dotsidx_namec                    t        d|t        dt        d      t        dt        d                  }t	        ||j
                  j                         |j                  |       t        |      }|j                  d      }|D cg c]  }|d   	 }}||v sJ d| d	|        |D cg c]  }|d   |k(  s| }	}t        t        |	      d
       t        |	d   d   dg       yc c}w c c}w )zATest that index names with various casing are properly reflected.rJ   rK   TrL   rN   rO   rl   z	Expected z in r   r   r   N)r   r   r   r   r$   r   rN   r   r   r,  r   rV  )
r}   r   r[   r  r<  r   r  r   index_namesmatching_idxs
             r?   test_get_indexes_quoted_namez4ComponentReflectionTest.test_get_indexes_quoted_name  s     4d366":&	
 	h!J'z"""<0.56ss6{66;&O)H:T+(OO& (/J#f+2IJJCq!LON+fX6 7 Ks   C#&C(4C(c                     t        |      }| j                         }|j                  |      }| j                  d      d |f   }| j	                  ||| j
                         y )NT)r  )r   ri   r/  r  rs  r  )r}   r   r   rl   	reflectedrQ  s         r?   &test_get_temp_table_unique_constraintsz>ComponentReflectionTest.test_get_temp_table_unique_constraints  s]     z"##%//5	lll%tTl3C)B)BCrA   c                 F   t        |      }| j                         }|j                  |      }|D ]  }|j                  dd         ddgddg}t        j
                  j                  j                  rg |d   d<   t        |D cg c]  }|d   dk(  s| c}|       y c c}w )	Nr  Fr   r  )rc  r   rl   r   r  rl   )	r   ri   r,  r  r   rS   index_reflects_included_columnsr8   r   )r}   r   r   ru   r  indexpectedr   s           r?   test_get_temp_table_indexesz3ComponentReflectionTest.test_get_temp_table_indexes  s    z"))+
"":. 	-CGG%t,	- ug}M
 ;;CC-/HQK)*#DSs6{m'CSD	
Ds   BBc                 ,   |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        j                  d            }t        d|t        dt        j                  d            t        dt        j                  d            t        dt        j                        t        d	t        j                  d            t        d
t        j                  d            |      }|D ],  }|j                  t        j                  |d   d|d   i       . |j                  |       t        |      }t        |j                  d|      t        j                  d            }	t               }
t!        t#        |      t#        |	             t%        ||	      D ]d  \  }}|j'                  dd       }|r|
j)                  |       t!        |j'                  dd       d        |j'                  dd        t!        ||       f t+               }t        d|||      }	|	j,                  D ch c]  }|j.                   }}|	j0                  D ch c](  }t3        |t        j                        r|j.                  * c}j5                  dg      }|j7                  |      rJ |
r t!        |
|       t!        |t                      | j8                  j:                  j.                  }t!        |j                  ||      g        y c c}w c c}w )Nunique_ar   )rl   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   rl   r   testtblrj  rb  rQ   r   r   r   r  )r   rR   )r   rU   r9  operator
itemgetterr   r   ro   r   r   append_constraintr  r   r   r/  r  r   rV  rU  r  r  r   r  rl   constraintsr  
differencer^  r   rw  )r}   r[   r   r5  rR   uniquesrd  r  r   r  names_that_duplicate_indexr  refldupereflected_metadatar   	idx_namesuquq_namesrR  s                       r?   r0  z3ComponentReflectionTest.test_get_unique_constraints*  s    ''FF#cU;'I'I)E5>J&>(3%@ ##F+

 3		"&3		"&3

#5"))B-(5"))B-(

  	B####R%7IbjI	 	Z z"''	&'A##F+
	
 &)U"CL#i.)gy1 		JD$ 88.5D*..t4D)40HH&-dO		 &Z$	
	 *3):):;#SXX;	;  ++
"b112 GG
 *n%
&	 	 ))(333%*I6#% ++00D''v'>C <
s   6L-LUQ_emailuq_emailmixedCaseUQzuq.with.dotsuq_namec                 `   t        d|t        dt        d      t        dt        d            t	        j
                  d|             |j                  |       t        |      }|j                  d      }t        t        |      d       t        |d	   d
   |       t        |d	   d   dg       y)zUTest that unique constraint names with various casing are
        properly reflected.rJ   rK   TrL   emailrO   r  r   r   rl   r   N)r   r   r   r   ro   r  r   r   r/  r   rV  )r}   r   r[   r  r   uq_conss         r?   'test_get_unique_constraints_quoted_namez?ComponentReflectionTest.test_get_unique_constraints_quoted_name  s     	4d37F2J'g6	
 	J'z"--l;CL!GAJv(GAJ~&	2rA   c                     |rt         j                  }nd }t        |      }dD ])  }|j                  ||      }t	        t        |             + y )NrT  rQ   )r   rU   r   r   r+   bool)r}   r   r5  rR   r   viewr  s          r?   r"  z0ComponentReflectionTest.test_get_view_definition  sQ    
 ''FFz"D 	D((f(=ADG	rA   c                     t        |      }t        t              5  |j                  d       d d d        t        t              5  |j                  d       d d d        y # 1 sw Y   3xY w# 1 sw Y   y xY w)Nview_does_not_existrN  )r   r   r!   r   r   s      r?   'test_get_view_definition_does_not_existz?ComponentReflectionTest.test_get_view_definition_does_not_exist  sj    z"+, 	<$$%:;	<+, 	.$$W-	. 	.	< 	<	. 	.s   AA+A(+A4c                     t        |      }dD ]A  \  }}|j                  |      }|D ci c]  }|d   |
 c}|   }|j                  dd      rAJ  yc c}w )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.

        ))rN  rO  )rg  r^  )r\  r]  rl   r  TN)r   r   get)r}   r   r   r  cnamer  r   id_s           r?   test_autoincrement_colz.ComponentReflectionTest.test_autoincrement_col  sk     z"
 	2LE5
 ##E*D)-.A1V9a<.u5C77?D111	2 /s   Ac                    t        t        j                        }|rt        j                  nd }t        j
                  j                  j                  rY|j                  d|      }t        t        |t                     |j                  d|      }t        t        |t                     y t        t              5  |j                  d|       d d d        y # 1 sw Y   y xY w)NrN  rQ   rw  )r   r   r=   rU   r   rS   r  r8   r  r+   r  r;   r   r  )r}   r5  r   rR   r  s        r?   r  z.ComponentReflectionTest.test_get_table_options  s     vyy!'1##t1199(((@CJsD)*(()9&(ICJsD)*23 ?&&wv&>? ? ?s   :CC c                    t        t        j                        }t        j                  j
                  j                  rf|rt        j                  nd }|j                  |      }|j                  |      D ci c]  }||f|j                  ||       }}t        ||       y t        t              5  |j                          d d d        y c c}w # 1 sw Y   y xY w)NrQ   )r   r   r=   r   rS   r  r8   rU   get_multi_table_optionsr8  r  r   r   r  )r}   r5  r   rR   r  rd  rQ  s          r?   test_multi_get_table_optionsz4ComponentReflectionTest.test_multi_get_table_options  s    vyy!1199+5V''4F..f.=C "111@ !7!7f!7!MMC  SM23 /,,./ // /s   8C3CCc                     fd}|S )Nc                    t              } ||d       ||d}| r |        } g }t        j                  |v r|j                  g d       t        j                  |v r|j                  ddg       t        j
                  |v r|j                  ddg       | r| |d<   |r||d<    || |||j                  d      	      }	|g}
|t        j                  k(  r2|j                         }|j                  d
       |
j                  |       |t        j                  k(  r2|j                         }|j                  d       |
j                  |       t              |
|	fS )Nrg  )r4   r   )rn  rN  does-not-existr  r  r  rR   rD  )rR   r4   r   rD  r4   r   )r   r   r@  r  rA  rB  r  r    r=  copyr  append)rR   r4   r   r<  single_reflect_fn
exp_methodr   rt   rD  rQ  kwsnkwr   s               r?   provide_fixturez>ComponentReflectionTest.get_multi_exp.<locals>.provide_fixture  sK    :&D d$56 $/BL4'##? $&##%8:J$KL++t3##^5E$FG%8%1>"VVN3	C $C+++ggi 

3z'''ggi

3:&S00rA   rF   )r}   r   r  s    ` r?   get_multi_expz%ComponentReflectionTest.get_multi_exp  s    ,	1\ rA   c                      |||||t         j                  | j                        \  }}}|D ]0  }	|j                           |j                  di |	}
t        |
|       2 y NrF   )r   r  r  r   r  r   r}   r  rR   r4   r   r<  r   r  rQ  rt   results              r?   #test_multi_get_table_options_tablesz;ComponentReflectionTest.test_multi_get_table_options_tables'	  sn    
 '''
c3  	B1T117B7F	rA   c                      |||||t         j                  | j                        \  }}}|D ].  }	|j                          t	         |j
                  di |	|       0 y r  )r   r2  r  r   r   get_multi_table_comment)
r}   r  rR   r4   r   r<  r   r  rQ  rt   s
             r?   test_get_multi_table_commentz4ComponentReflectionTest.test_get_multi_table_comment9	  sj    
 '''
c3  	9B,,,2r2C8	9rA   c           	          dt         fd}t        |t              r6t        |j	                         D ci c]  \  }} ||      | c}}||       y t        |D cg c]
  } ||       c}||       y c c}}w c c}w )Nr  c                 L    t        j                  dd|       j                         S )Nz['\" ]rL  )resubr  )r  s    r?   _cleanz:ComponentReflectionTest._check_expressions.<locals>._cleanK	  s    66)R.4466rA   )r  r  r;   r   r  )r}   r  rQ  err_msgr  er  s          r?   _check_expressionsz*ComponentReflectionTest._check_expressionsJ	  sf    	7 	7 c4 &,,.9$!QA93HF+q+S': :+s   A3
A9c                 T   |t        |||       y t        t        |      t        |      |       t        ||      D ]j  \  }}t        |      t        |      z  D ]K  }||v s
||v s||v s| d| d| }|dv r| j	                  ||   ||   |       9t        ||   ||   |       M l y )Nz - )r  r  )r   rV  rU  r  r  )	r}   r  rQ  req_keysmsgrr  r   r  s	            r?   rs  z#ComponentReflectionTest._check_listS	  s    S!FSXs+FC( 51Q#a& 5AH}aAF%(EQCs1#"6 AA 33AaD!A$H!adG455rA   c                     t        t        |j                               t        |j                                      |D ](  }||   ||   }}|r|g|g}}| j                  ||||       * y r   )r   r  keysrs  )r}   r  rQ  r  
make_listsr   r  r  s           r?   _check_table_dictz)ComponentReflectionTest._check_table_dicta	  se    CCHHJ0 	0A!9c!fqAsQC1Q8Q/		0rA   c                      |||||t         j                  | j                        \  }}}|D ]A  }	|j                           |j                  di |	}
| j                  |
|| j                         C y r  )r   r   r  r   get_multi_columnsr  r  r  s              r?   test_get_multi_columnsz.ComponentReflectionTest.test_get_multi_columnsi	  s~     '!!
c3  	LB+T++1b1F""630J0JK	LrA   c                      |||||t         j                  | j                        \  }}}|D ]C  }	|j                           |j                  di |	}
| j                  |
|| j                  d       E y )NT)r  rF   )r   r&  r  r   get_multi_pk_constraintr  r  r  s              r?   test_get_multi_pk_constraintz4ComponentReflectionTest.test_get_multi_pk_constraint{	  s    
 '''LL
c3  	B1T117B7F""T33 # 	rA   c                     t         j                  j                  j                  sS||fD ]K  }|j	                         D ]6  }t        |      dkD  st        d |D              s%|j                  |       8 M y y )Nr   c              3   b   K   | ]'  }|j                  d       dt        j                  fv  ) yw)rl   N)r  r,   r?  ).0r  s     r?   	<genexpr>z7ComponentReflectionTest._adjust_sort.<locals>.<genexpr>	  s+      ,>?f$)99,s   -/r  )r   rS   r  r8   r  rV  anysort)r}   r  r  r   objr  s         r?   _adjust_sortz$ComponentReflectionTest._adjust_sort	  su    <<DD) *::< *C3x!| ,CF, ) S)	** ErA   c                 
    |||||t         j                  | j                        \  }}}|D ]U  }	|j                           |j                  di |	}
| j                  |
|d        | j                  |
|| j                         W y )Nc                     t        | d         S )Nr  tupleds    r?   r   zEComponentReflectionTest.test_get_multi_foreign_keys.<locals>.<lambda>	  s    uQ/D-E'F rA   rF   )r   r)  r  r   get_multi_foreign_keysr	  r  r  r  s              r?   test_get_multi_foreign_keysz3ComponentReflectionTest.test_get_multi_foreign_keys	  s    
 '&&LL
c3  	HB0T00626FF ""630F0FG	HrA   c                      |||||t         j                  | j                        \  }}}|D ]A  }	|j                           |j                  di |	}
| j                  |
|| j                         C y r  )r   r,  r  r   get_multi_indexesr  r  r  s              r?   test_get_multi_indexesz.ComponentReflectionTest.test_get_multi_indexes	  s~    
 '!!
c3  	KB+T++1b1F""630I0IJ	KrA   c                 
    |||||t         j                  | j                        \  }}}|D ]U  }	|j                           |j                  di |	}
| j                  |
|d        | j                  |
|| j                         W y )Nc                     t        | d         S )Nr   r  r  s    r?   r   zKComponentReflectionTest.test_get_multi_unique_constraints.<locals>.<lambda>	  s    U1^;L5M rA   rF   )r   r/  r  r   get_multi_unique_constraintsr	  r  r	  r  s              r?   !test_get_multi_unique_constraintsz9ComponentReflectionTest.test_get_multi_unique_constraints	  s    
 ',,LL
c3  	PB6T66<<Ffc+MN""630N0NO		PrA   c                 
    |||||t         j                  | j                        \  }}}|D ]U  }	|j                           |j                  di |	}
| j                  |
|d        | j                  |
|| j                         W y )Nc                     t        | d         S Nr  r  r  s    r?   r   zJComponentReflectionTest.test_get_multi_check_constraints.<locals>.<lambda>	  s    U1Y<5H rA   rF   )r   r5  r  r   get_multi_check_constraintsr	  r  r  r  s              r?    test_get_multi_check_constraintsz8ComponentReflectionTest.test_get_multi_check_constraints	  s    
 '++LL
c3  	HB5T55;;Ffc+HI""630F0FG		HrA   r  r   r&  r)  r,  r/  r5  r2  methodc                     t        |      }t        ||      }t        t              5   |d       d d d        y # 1 sw Y   y xY w)Ntable_does_not_exists)r   getattrr   r!   )r}   r  r   r   r   s        r?   test_not_existing_tablez/ComponentReflectionTest.test_not_existing_table	  sA    0 z"tV$+, 	*()	* 	* 	*s	   	9Ac           	      H   t         j                  fd}t        j                  j	                  t         d|      5  t        t        d      5  t        |      j                  t        dt                     d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                  T    |j                  di       }t        d      |d<    | i |S )Nunreflectableerr)N
some_table)
setdefaultr"   )r   r   urmcs      r?   patchedz;ComponentReflectionTest.test_unreflectable.<locals>.patched
  s1    or2B'>u'EB#$q;A;rA   r  r&  r'  )r   r  r,   patchobjectr	   r"   r   reflect_tabler   r   )r}   r   r+  r*  s      @r?   test_unreflectablez*ComponentReflectionTest.test_unreflectable
  s    ((	
 ZZy*=wG 	&'>F 
#11,
3T	 	 	 	s#   B.B;BB	BB!r   c                    t               }|rt        j                  nd }|j                  |||d       t	        |      }|j                  |      }|r)||j                  |      z  }	 ||j                  |      z  }|r|D cg c]	  }| d|  }}t        t        |j                        t        |             y # t        $ r Y Jw xY wc c}w )NF)rR   r   resolve_fksrK  )r   r   rU   reflectr   r8  r@  rA  r  r   r9  r   )	r}   r   r5  r   mrR   r   r   r<  s	            r?   test_metadataz%ComponentReflectionTest.test_metadata
  s    
 J'1##t			*V5e	Lz"%%f-d))&11F$::6BB /56!!o6F6F188fVn-	 '  7s   'B: C	:	CCc           
      T   t        d|t        dt        d      t        dt        d      d       |j                  |       t	        |      }|j                  d      }t        |ddi       |j                  d      }|D ci c]  }|d	   |d
    }}ddd}t        ||       y c c}w )Nunicode_commentsunicodeu   é試蛇ẟΩr   emojiu	   ☁️✨u   試蛇ẟΩ✨r  rl   r   )r7  r8  r   r   r   r   r   r2  r   r   )	r}   r   r[   r   tcr  r   valuerQ  s	            r?   test_comments_unicodez-ComponentReflectionTest.test_comments_unicode%
  s    9g?7G[9$	
 	J'z"##$67B)*+ 23267Q6AiL(77)K@E3 8s   B%c           	         t        d|t        dt        d      d       |j                  |       t	        |      }|j                  d      }t        |ddi       |j                  d      d   }t        |d   |d	   iddi       y )
Nr6  r8  u&   🐍🧙🝝🧙‍♂️🧙‍♀️r   u&   🎩🁰🝑🤷‍♀️🤷‍♂️r  r   rl   r   r9  )r}   r   r[   r   r:  r   s         r?   test_comments_unicode_fullz2ComponentReflectionTest.test_comments_unicode_full:
  s    7G-UV<		
 	J'z"##$67BABC/03QvY)%1Y'Z[rA   c           
         t         j                  j                  t              }t	        d|t        dt        j                  |            t        dt        j                                      |j                  |       t               }t	        d||      }t        |j                  j                  j                  j                  |       t        |j                  j                   j                  j                         t#        |      }|j%                  d      \  }}t        |d   j                  |       t        |d   j                         y )Nr<  collated)	collationnot_collatedr   r  )r   rS   get_order_by_collationr   r   r   ro   r   r   r   r   r   r@  r  rA  r*   rB  r   r   )	r}   r   r[   rA  r   t2r   r@  rB  s	            r?    test_column_collation_reflectionz8ComponentReflectionTest.test_column_collation_reflectionK
  s     $$;;FC	:ryy9=>>299;/		
 	J'Z3*5BDDMM(()4!!&&001z"!%!1!1#!6,HV&&	2V$../rA   r   r-   )NF)urB   rC   rD   run_insertsr   r   rE   r\   rI  ri   rY   rW   r  r  r  r    r?  r   r  r  r  propertyr  r  r  r  r  r  r  r  r	  r  r  r   rS   schema_reflectionr  r   r&  r(  schema_create_deleter,  r0  r2  r   r   rT   r>  rB  r  rF  rV   rr   rI  r   rM  rO  rK  r$  r   rm  ro  r  rq  !primary_key_constraint_reflectionr'  r  r~  r*  r  r  r  r   r-  r  r  r  r  r8  r  temp_table_reflect_indexesr  r0  r  r"  r  table_reflectionr  r  r  r   r  r  rE  r  r  r  rs  r  r  r  r	  r  r  r  r9  r  r"  r/  r   r4  r<  comment_reflection_full_unicoder>  column_collation_reflectionorder_by_collationrE  rF   rA   r?   rG  rG  r  s    $$K+ $N N
 k- k-Z 
 

 O OB  4!)Z oo^^B oo^^"L oo^^^@ 7 7
 oo^^.` / /
 oo^^Vp 
 
 oo^^sj 2 2
 oo^^CJ ( (
 oo^^8t # # ''G (G
 ''8 (8 ''G (G ''
8 (
8 ''**; + (; ''> (>
 ''N (N W	((JJK
 W	w''(%,!-!-F W	w''(%,-- &&D 'D
 %%%%6 & &6
 ((, ), ((H  )H
0 W	g&&../	ug&&667$$w'7'7'G'GG	

 (
<6
<6B ++	
 ,	
 +++ ,+ ++,,%%B & - ,B
 W4))112\ 77
 8
: W 77''4 ( 84, W4))112\ 77$> 8$>L W 77%6 8%6N 00"8  1"8H W4))112\ &&
 '
, W3/
 &&**22- 3 + '- W &&7 '70 ++22D 3 ,D 00
 1
  W	w''((\ 22VD 3VDp W 223 33. %%W4))112\ & %%. &. &&2 '20 W	w''((\?? W4!1!1!9!9:EB/ C/ __/ /b ++  ,  ((9  )9;50 L L" 77  8$* 77H  8H& &&K  'K  22P  3P" 11H  2H" W	g..DDE>>	

 >>	
 
((99:$99	

 $88	
 
g..AAB+.*/.* W$=W	w%%&. >." (( )( 55\ 6\  11((0 ) 20rA   rG  c                       e Zd ZdZdZej                  d        Zej                  d        Zd Z	d Z
d Zej                  j                  d        Zej                  j                  d	        Zy
)TableNoColumnsTest)reflect_tables_no_columnsTc                 >    t        d|       |j                  |       y Nr  )r   r   r}   r   r[   s      r?   table_no_columnsz#TableNoColumnsTest.table_no_columnsg
  s    gx J'rA   c                     t        d|       t        j                  |dt        d             t        j                  |dt        d             |j	                  |       y )Nr  r^   z*CREATE VIEW empty_v AS SELECT * FROM emptyr_   zDROP VIEW IF EXISTS empty_v)r   r   ra   r#   r   rU  s      r?   view_no_columnsz"TableNoColumnsTest.view_no_columnsl
  sR    gx <=	
 	mS)F%G	
 	J'rA   c                 n    t        dt               |      }t        t        |j                        g        y )Nr  r   r   r   r   r  r   )r}   r   rV  rD  s       r?   test_reflect_table_no_columnsz0TableNoColumnsTest.test_reflect_table_no_columns|
  s$    7HJjADJrA   c                     t        |      }t        |j                  d      g        |j                         }t        |dg i       y )Nr  rT  )r   r   r   r  )r}   r   rV  r   multis        r?   !test_get_columns_table_no_columnsz4TableNoColumnsTest.test_get_columns_table_no_columns
  s>    z"DW%r*&&(EOR()rA   c                     t               }|j                  |       t        |j                        j	                  dg      sJ y rT  )r   r2  r  r   r^  )r}   r   rV  r3  s       r?   "test_reflect_incl_table_no_columnsz5TableNoColumnsTest.test_reflect_incl_table_no_columns
  s3    J			*188}))7)444rA   c                 n    t        dt               |      }t        t        |j                        g        y )Nempty_vr   rZ  )r}   r   rX  rD  s       r?   test_reflect_view_no_columnsz/TableNoColumnsTest.test_reflect_view_no_columns
  s$    9hj
CDJrA   c                     t        |      }t        |j                  d      g        |j                  t        j
                        }t        |dg i       y )Nrb  )r   )Nrb  )r   r   r   r  r   rA  )r}   r   rX  r   r]  s        r?    test_get_columns_view_no_columnsz3TableNoColumnsTest.test_get_columns_view_no_columns
  sH    z"DY',&&JOO&<E%r*+rA   N)rB   rC   rD   r   r   r   r   rV  rX  r[  r^  r`  rS   r   rc  re  rF   rA   r?   rQ  rQ  c
  s    1L $__( ( __( (*5
   , ,rA   rQ  c                   `   e Zd ZdZ ej
                  ddg      d        Z ej
                         d        Zd Zej                  j                  d        Zej                  j                   ej                  dd	d
d      d               Zej                  j                   ej                  ddd
d      d               Zej                  j                  d        Zej                  j"                  d        Zej                  j&                  d        Zej                  j*                  d        Zd Zej                  j0                  d        Zej                  j0                   ej                  ej6                  ej8                  ej:                  ej<                  ej                  j>                  fej@                  ej                  j>                  fd      d               Z!ej                  j0                  d        Z" ej                  d
dd
ej                  jF                  fd
d
dej                  jH                  fi d
dej                  jH                  fi dd
ej                  jJ                  fd
d
dej                  jL                  fd
dd
ej                  jN                  fd      d        Z( ej                  e) e*jV                  d       d!fe)d d!fe, e*jZ                         d"fe) e*jV                  d#      d$ej                  j\                  fe) e*jV                  d%      d&ej                  j\                  fe/ e0jb                         d'fe) e*jd                  d(       e*jd                  d)      z   d$ej                  j\                  fd*      ej                  jf                  d+               Z4y
),ComponentReflectionTestExtraTF)paramsc                 <    |j                   rt        j                  S y r   )paramr   rU   )r}   requests     r?   use_schema_fixturez/ComponentReflectionTestExtra.use_schema_fixture
  s    ==%%%rA   c                 @    t         j                  fd       }|S )Nc              3   N   K   t              f j                         y wr   )r   r   )r   r   r[   rl  s    r?   goz:ComponentReflectionTestExtra.inspect_for_table.<locals>.go
  s%     $gj&999
+s   "%)
contextlibcontextmanager)r}   r[   r   rl  ro  s    ``` r?   inspect_for_tablez.ComponentReflectionTestExtra.inspect_for_table
  s"    		"	"	, 
#	,
 	rA   c           
          d }t        |D cg c]  }|d    ||d         d c}d       }t        |d       }t        ||       y c c}w )Nc                     dj                  t        j                  d| j                         t        j                              S )N zand|\d|=|a|b|c|or|<|>)joinr  findallr  I)r  s    r?   	normalizez5ComponentReflectionTestExtra.ck_eq.<locals>.normalize
  s.    88

3W]]_bddK rA   rl   r  rl   r  c                     | d   S r  rF   items    r?   r   z4ComponentReflectionTestExtra.ck_eq.<locals>.<lambda>
  
    d9o rA   r  c                     | d   S r  rF   r|  s    r?   r   z4ComponentReflectionTestExtra.ck_eq.<locals>.<lambda>
  r~  rA   )r9  r   )r}   r  r  ry  r}  s        r?   ck_eqz"ComponentReflectionTestExtra.ck_eq
  se    	
  & f)DO2LM /
	 .
 	Ix s   A
c                      |d      5 \  }}t        d|t        dt        j                  d            |       d d d        | j	                  j                  d      g        y # 1 sw Y   -xY w)Nrw  rN   rj  rQ   )r   r   ro   r   r  r5  )r}   r[   rr  rR   r   s        r?   #test_check_constraint_no_constraintz@ComponentReflectionTestExtra.test_check_constraint_no_constraint
  so    /0 	4GVY vryy}-		 	

++,<V+L	
	 	s   0A%%A.	my_inlineMyInlineNconstraint_namer   c                 z    |d      5 \  }}t        d|t        dt               d      t        dt               t        j                  d|            t        dt        d	            |
       d d d        j                  d
      }| j                  ||xs t        j                  ddg       y # 1 sw Y   ExY w)Nsa_ccrK   TrL   r   a > 1 AND a < 5r  rN   rO   rQ   a > 1 and a < 5rz  )
r   r   r   ro   r  r   r5  r  r,   r?  r}   r[   rr  r  rR   r   r  s          r?   test_check_constraint_inlinez9ComponentReflectionTestExtra.test_check_constraint_inline
  s     w' 	+>FItWYD9I&&) vvbz*	  33GF3K	

 ,7txx0	
%	 	s   A$B11B:my_ck_const	MyCkConstc           
      (    |d      5 \  }}t        d|t        dt                     t        j                  d|      |       d d d        j                  d      }| j                  ||xs t        j                  ddg       y # 1 sw Y   ExY w)Nr  r   za = 1 OR (a > 2 AND a < 5)r  rQ   za = 1 or a > 2 and a < 5rz  )	r   r   r   ro   r  r5  r  r,   r?  r  s          r?    test_check_constraint_standalonez=ComponentReflectionTestExtra.test_check_constraint_standalone
  s     w' 		+>FIsGI&""0 		 33GF3K	

 ,7txx9	
		 		s   ;BBc                 z    |d      5 \  }}t        d|t        dt               d      t        dt               t        j                  d            t        dt               t        j                  dd	
            t        dt                     t        dt        d            t        j                  dd
      t        j                  dd
      t        j                  dd
      |       d d d        j                  d      }| j                  |dddd	ddt        j                  ddg       y # 1 sw Y   IxY w)Nr  rK   TrL   r   r  r  zb > 1 AND b < 5r  r  r   rN   rO   some_uqzc > 1 AND c < 5cc1	some_c_uqrQ   zc > 1 and c < 5rz  zb > 1 and b < 5r  )r   r   r   ro   r  r   r  r5  r  r,   r?  )r}   r[   rr  rR   r   r  s         r?   test_check_constraint_mixedz8ComponentReflectionTestExtra.test_check_constraint_mixed  s   w' 	+>FItWYD9sGIr'9'9:K'LMI&&'8{K
 sGI&vvbz*##F;""#45A##Ck:	& 33GF3K	

+<=$1BC.?@	
+	 	s   C D11D:c                     |d      5 \  }}t        d|t        dt        d      t        dt              t        dt                    }t        d|j                  j
                  |j                  j                  |j                  j                         ddd       j                  d      }t        |d	   d
   g d       y# 1 sw Y   /xY w)ztest for #12894sa_multi_indexColumn1TrL   Column2Column3Index_ExampleNr   r   )r  r  r  )
r   r   r   r$   r   r  r  r  r,  r   )r}   r[   rr  rR   r   rJ   r  s          r?   test_index_column_orderz4ComponentReflectionTestExtra.test_index_column_order4  s     /0 	4GVY y't<y'*y'*J $$$$$$		 ''(89GAJ~&(IJ	 	s   B	C  C	c                 .   t        d|t        dt        d            t        dt        d            t        dt        d                  }t        dt	        j
                  |j                  j                        |j                  j                  t	        j
                  |j                  j                               dt        dt	        j                  |j                  j                               t        d	|j                  j                         |j                         t              }d	dgd
i dg}fd} ||d           G d dt              } G fddt              }t        j                  j                   j"                  rdg d |d      d |d      gd
d}	 ||	       |j%                  d|	       dd g |d d      gd
d}
 ||
       |j'                  |
       t)        |j+                  d      |       t-               }t        d|      }nGt/        d      5  t)        |j+                  d      |       t-               }t        d|      }d d d        | j1                  |j2                  j4                         y # 1 sw Y   1xY w)Nr<  xrb  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)rl   r   rc  r  c                     t         j                  j                  j                  r$g | d<   j                  j
                   dg i| d<   y | j                  di        y )Nr  _includer  )r   rS   r  r8   r/  rl   r(  )entryr   s    r?   completeIndexzYComponentReflectionTestExtra.test_reflect_expression_based_indexes.<locals>.completeIndexd  s\    ??GG+-'(!((--.h7,'(   !2B7rA   r   c                       e Zd Zd Zy)[ComponentReflectionTestExtra.test_reflect_expression_based_indexes.<locals>.lower_index_strc                 B    |j                         }d|v xr
 d|v xs d|v S )Nr  r  r  r  )r}   r   ols      r?   r  zbComponentReflectionTestExtra.test_reflect_expression_based_indexes.<locals>.lower_index_str.__eq__p  s)    [[]"}A#)*@sbyArA   Nr  rF   rA   r?   lower_index_strr  o  s    BrA   r  c                       e Zd Z fdZy)^ComponentReflectionTestExtra.test_reflect_expression_based_indexes.<locals>.coalesce_index_strc                 4    d|j                         v xr |v S )Ncoalescer  )r}   r   long_strs     r?   r  zeComponentReflectionTestExtra.test_reflect_expression_based_indexes.<locals>.coalesce_index_str.__eq__v  s    !U[[]2Hx57HHrA   Nr  )r  s   r?   coalesce_index_strr  u  s	    IrA   r  )Nr  Nzlower(x)zlower(y))rl   r   r  rc  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   rS    reflect_indexes_with_expressionsr8   insertr  r   r,  r   r
   !compare_table_index_with_expectedr/  rl   )r}   r[   r   r<  r   r  r  r  r  
expr_indexexpr_index_longr   rD  r  s     `          @r?   %test_reflect_expression_based_indexeszBComponentReflectionTestExtra.test_reflect_expression_based_indexesH  sD   3r
#3r
#3r
#
 	gtzz!##%%(!##%%ACCEE1BC'lDMM!##%%:;iJ'z" "!$#%	
	8 	hqk"	Bc 	B	I 	I
 <<DD 1#J/#J/ 
  	J *%OOAz* %!%&xj'CD   O /*OOO,  %x0BsBj9B  > D$$S)84Z3*=> 	..*++00	
> >s   '4JJc                    t        d|t        dt        d            t        dt        d                  }t        d|j                  j
                        }dg|j                  |j                  j                     d<   |j                  |       t        |      }|j                  d      }t        |ddgdgdt        j                  dg       t        |d	   d
   d|j                  j                  z     dg       t        dt               |      }t        t!        |j"                        d	   j                  |j                  j                     d   dg       y )Nr<  r  rb  r  r  includeF)rl   r   r  rc  r  r   r  z
%s_includer   )r   r   r   r$   r   r  r  r/  rl   r   r   r,  r   r,   r?  r   r  r  )r}   r[   r   r<  r   r   r,  rD  s           r?   test_reflect_covering_indexz8ComponentReflectionTestExtra.test_reflect_covering_index  sE   3r
#3r
#	
 GQSSUU#BEJ--223I>J'z"&&s+ $%(E(+u#'+xx	
 	N,-z00555 E		
 3
*=Q//
0A0A0F0FG E		
rA   c                     t        d|gt        |      D cg c]  \  }}t        d|z  |       c}} }|j                  |       t	        |      j                  d      D cg c]  }|d   	 c}S c c}}w c c}w )Nr<  zt%dr  )r   rW  r   r   r   r   )r}   r   r[   r   rf  type_r<  r   s           r?   _type_round_tripz-ComponentReflectionTestExtra._type_round_trip  s{    
 8A7GH81efUQY&H

 	
#*:#6#B#B3#GHa&	HH	 I Is   A3$A9c                     | j                  ||t        j                  dd            D ]J  }t        |t        j                        sJ t	        |j
                  d       t	        |j                  d       L y )N   rQ  )r  r[  r_  r  r   	precisionscale)r}   r   r[   typs       r?   test_numeric_reflectionz4ComponentReflectionTestExtra.test_numeric_reflection  sd    (()"3"3B":
 	C c9#4#4555r"		1	rA   r  c                    | j                  || |d            d   }t        |t        j                        rt	        |t        j                        sTJ t        |t        j
                        rt	        |t        j
                        sJ t	        |t        j                        sJ t        |j                  d       t	        |j                  t              sJ y )N4   r   )
r  
issubclassr[  rq   r  r  r   r   lengthint)r}   r   r[   r  r  s        r?   test_string_length_reflectionz:ComponentReflectionTestExtra.test_string_length_reflection  s     ##J%)DQGeY../c9#4#4555y~~.c9>>222c9#3#3444CJJ#**c***rA   c           
         t        d|t        dt        d      t        dt        d            }|j                  |       t	        t        |      j                  d      D ci c]  }|d   |d    c}ddd	       y c c}w )
Nr<  r   TrR  r  Frl   rS  )r   r  )r   r   r   r   r   r   r   )r}   r   r[   r<  r   s        r?   test_nullable_reflectionz5ComponentReflectionTestExtra.test_nullable_reflection  s    3$/3%0	
 	
 #:.::3? FS_, U#	
s   !A=CASCADEzSET NULLz	NO ACTIONRESTRICTzexpected,ondelete,onupdatec                    i }|r||d<   |r||d<   ||}t        d|t        dt        d      d       t        d|t        dt        d      t        d	t        t        d
d            t        dt	        d            d       t        d|t        dt        d      t        dt	        d      d      t        dt              t        j                  dgdgfddi|d       |j                  |       t        |      }|j                  d      d   d   }t        |D 	ci c]  }	||	   s	|	||	    c}	i        |j                  d      d   d   }t        ||       y c c}	w )Nondeleteonupdater  rK   TrL   r   rd  x_idzx.idxidr  test
   userrl   rO   FrR  tidztable.idmyfkr   r5   )r   r   r   r   r   ro   r   r   r   r)  r   )
r}   r   r[   r  r  r  r5   r   optsr   s
             r?   test_get_foreign_key_optionsz9ComponentReflectionTestExtra.test_get_foreign_key_options  sp   T "*GJ"*GJH4d3		
 	4d367JvE$BC66":&	
 	4d366":65'"##*,26= 
	
 	J'z" $$W-a0;1AaQQZ126$$V,Q/	:D( 2s   
E'E10z'?10'?z1|truez3 + 5z3\+5z(3 * 5)z3\*5zcurrent_timestamp|now|getdate35zdatatype, default, expected_regc           
          t        d|t        dt        d      t        d||            }|j                  |       t	        |      j                  d      d   d   }t        j                  d	d
|      }t        ||t        j                         y )Nr<  rK   TrL   thecol)server_defaultr   r  z	[\(\) \']rL  )flags)
r   r   r   r   r   r   r  r  r   
IGNORECASE)	r}   r[   r   datatyper  expected_regr<  r  reflected_sanitizeds	            r?   test_server_defaultsz1ComponentReflectionTestExtra.test_server_defaultsd  s}    : 4d38Xg>	
 	
J'33C8;IF	 ff\2yA$l"--HrA   )5rB   rC   rD   r   r   r   rl  rr  r  rS   r9  r  "inline_check_constraint_reflectionr   r  r  r  indexes_check_column_orderr  indexes_with_expressionsr  r  r  r  rL  r  r[  r   rq   r  NVARCHARnvarchar_typesNCHARr  r  1foreign_key_constraint_option_reflection_ondelete1foreign_key_constraint_option_reflection_onupdate1fk_constraint_option_reflection_ondelete_noaction1fk_constraint_option_reflection_onupdate_restrict1fk_constraint_option_reflection_ondelete_restrictr  r   ro   r  r   trueexpression_server_defaultsr   r   nowliteral_columnserver_defaultsr  rF   rA   r?   rg  rg  
  s.    $W__T5M* + W__ !. 11
 2
 88WZ0A
 9
@ 11W{D3D
 2
4 88
 9
> 00K 1K& ..X
 /X
t 55(
 6(
TI && ' &&W			W--<<=	'**99:
+ '
+ &&
 '
  WNN		
 NN		
 NN		
 NN		
 NN		
 NN		
 .K&N3O&N3l W	'"''$-+	$	"	'"'')Y'BGGG77		
 BGGI77		
 
8488:?@Bc"%6R%6%6s%;;77		
 3/2 %%I &34IrA   rg  c                   0    e Zd ZdZdZed        Zd Zd Zy)NormalizedNameTest)denormalized_namesTc                     t        t        dd      |t        dt        d             t        t        dd      |t        dt        d      t        dt	        d                   y )	Nr   Tr  rK   rL   rD  t1idzt1.id)r   r%   r   r   r   rZ   s     r?   r\   z NormalizedNameTest.define_tables  sU    D)4d3	

 	D)4d36:g./		
rA   c                    t               }t        t        dd      |t        j                        }|j
                  d   }|j                  j                  j                  |j                  j                        sJ t               }|j                  t        j                  d        |j
                  d   j                  j                  j                  |j
                  d   j                  j                        sJ y )NrD  Tr  r   r   c                 &    | j                         dv S )Nr   rD  r  )rl   r3  s     r?   r   zINormalizedNameTest.test_reflect_lowercase_forced_tables.<locals>.<lambda>  s    DJJLL,H rA   )only)r   r   r%   r   r=   r   r   r  r   rK   r2  )r}   r   t2_reft1_refm3s        r?   $test_reflect_lowercase_forced_tablesz7NormalizedNameTest.test_reflect_lowercase_forced_tables  s    ZD)2VYY
 4xx}}''444Z


IIH 	 	
 yy  %%0041B1B1E1EFFFrA   c                 R   t        t        j                        j                         D cg c]  }|j	                         dv r| }}t        |d   j                         |d   j	                                t        |d   j                         |d   j	                                y c c}w )Nr  r   r   )r   r   r=   r8  r  r   upper)r}   r<  
tablenamess      r?   r>  z'NormalizedNameTest.test_get_table_names  s     VYY'779
wwyL( 

 
 	JqM!:a=#6#6#89JqM!:a=#6#6#89
s   B$N)	rB   rC   rD   r   r   rE   r\   r  r>  rF   rA   r?   r  r    s*    *L $
 
G:rA   r  c                   \    e Zd Zd Zd Zd Zd Zej                  j                  d        Z
y)ComputedReflectionTestc                     t        t        j                        }|j                  d      }|D ci c]  }|d   |
 }}t	        d|d   d   v        t        |d   d   d        t        |d   d   d        y c c}w )Ncomputed_default_tablerl   42with_defaultr  normalcomputed_col)r   r   r=   r   r+   r   )r}   r   r  r   col_datas        r?   !test_computed_col_default_not_setz8ComputedReflectionTest.test_computed_col_default_not_set  s    vyy! 89*./QAfIqL//0;;<HXy)40H^$Y/6 0s   A6c                 T   t        t        j                        }|j                  d      }|D ci c]  }|d   |
 }}dD ]  }t	        d||   v        |d   }t	        d|v        t	        d|d   v        t        | j                  |d   d         d       t        d|d   v t        j                  j                  j                         t        j                  j                  j                  r5t        |d   d   t        j                  j                  j                         y y c c}w )	Nr  rl   )rK   r  r  computedr  r  	normal+42	persisted)r   r   r=   r   r+   r   ry  r   rS   "computed_columns_reflect_persistedr8   "computed_columns_default_persisted)r}   r   r  r   rN   r   compDatas          r?    test_get_column_returns_computedz7ComputedReflectionTest.test_get_column_returns_computed  s   vyy! 89&*+&	1++3 	1CJd3i/0	1'
h&'	Xj112DNN8J/	:;[I8J//??GG	
 >>FF$[1  CCKK G ,s   D%c                     t        d||   v        ||   d   }t        | j                  |d         |       t        j                  j
                  j                  rt        d|v        t        |d   |       y y )Nr  r  r  )r+   r   ry  r   rS   r  r8   r   )r}   rN   columnr  r  r  s         r?   check_columnz#ComputedReflectionTest.check_column  sp    
d6l*+<
+DNN8I./9>>FFK8+,%y1 GrA   c                    t        t        j                        }|j                  d      }|D ci c]  }|d   |
 }}| j	                  |ddt
        j                  j                  j                         t
        j                  j                  j                  r| j	                  |ddd       t
        j                  j                  j                  r| j	                  |dd	d
       y y c c}w )Ncomputed_column_tablerl   computed_no_flagr  computed_virtualznormal+2Fcomputed_storedz	normal-42T)r   r   r=   r   r  r   rS   r  r8   computed_columns_virtualcomputed_columns_storedr}   r   r  r   rN   s        r?   !test_get_column_returns_persistedz8ComputedReflectionTest.test_get_column_returns_persisted  s    vyy! 78&*+&	1++??GG		
 44<<"	 33;;!	 < ,s   C&c                    t        t        j                        }|j                  dt        j                        }|D ci c]  }|d   |
 }}| j                  |ddt        j                  j                  j                         t        j                  j                  j                  r| j                  |ddd       t        j                  j                  j                  r| j                  |d	d
d       y y c c}w )Nr  rQ   rl   r  z	normal/42r   znormal/2Fr!  z	normal*42T)r   r   r=   r   rU   r  r   rS   r  r8   r"  r#  r$  s        r?   -test_get_column_returns_persisted_with_schemazDComputedReflectionTest.test_get_column_returns_persisted_with_schema  s    vyy!#F,>,>   
 '++&	1++??GG		
 44<<"	 33;;!	 < ,s   C6N)rB   rC   rD   r  r  r  r%  r   rS   rT   r'  rF   rA   r?   r	  r	    s6    7*26  rA   r	  c                   p    e Zd ZdxZZdZdZed        Zd Z	d Z
ej                  j                  d        Zy)IdentityReflectionTestNT)r   rL  c                    t        d|t        dt              t        dt        t                            t        d|t        dt        t        dddd	d
dd                   t        j
                  j                  j                  rGt        d|t        dt              t        dt        t        dd            t        j                         y y )Nr   r  id1rD  r   Tr   r   rt     alwaysr   	incrementminvaluemaxvaluecyclecacherj  )r/  r   rQ   )
r   r   r   r   r   rS   rT   r8   r   rU   rZ   s     r?   r\   z$IdentityReflectionTest.define_tables   s    8W%5'8:.		
 		
" ##++x)ugxt2'FG)) ,rA   c                    t         j                  j                  j                  rd}t	        |      D ]  }||vs|j                  |        |rlt        t        |      t        |             |D ]H  }|dk(  rt        ||   ||   k         |dv rt        ||   ||   k\         6t        ||   ||   |       J y t        ||       y t        |d   |d          t        |d   |d          y )Nr.  r1  >   r4  r2  r   r0  )	r   rS   identity_columns_standardr8   r  r  r   rV  r+   )r}   r;  rQ  approxcommon_keysr   s         r?   checkzIdentityReflectionTest.checkB  s    55==K %[ !K'IIaL! CJC) 1AJaCF 2333aCF 23E!Hc!fa01 E3gG-k"C$45rA   c                 .   t        t        j                        }|j                  d      |j                  d      z   }|D ]  }|d   dk(  rt	        d|v        |d   dk(  rVd|v rt        |d          t        |d   d        t        d|v        | j                  |d   t        d	d
d
d
dd	d
      d       w|d   dk(  sd|v rt        |d          t        |d   d        t        d|v        | j                  |d   t        ddddddd      d	        y )Nr   rD  rl   r  r   r+  r  r  Fr   r.  Tr7  r   r   r   r,  rt  r-  )	r   r   r=   r   r)   r+   r   r9  r;   r}   r   r  r   s       r?   r   z,IdentityReflectionTest.test_reflect_identity_  sF   vyy!%(8(8(>> &	C6{h&s*+V%"c)C01C	ND)
c)*


O$"#!"!+#     V%"c)C01C	ND)
c)*


O#"#!#!#" !  5&	rA   c                 n   t        t        j                        }|j                  dt        j                        }|D ]v  }|d   dk(  rt        d|v        |d   dk(  s"d|v rt        |d          t        |d   d        t        d|v        | j                  |d   t        d	d
ddddd      d	       x y )Nr   rQ   rl   r  r   r+  r  r  Trj  r   r;  Fr.  r<  )
r   r   r=   r   rU   r)   r+   r   r9  r;   r=  s       r?   test_reflect_identity_schemaz3IdentityReflectionTest.test_reflect_identity_schema  s    vyy!V-?-?@ 	C6{h&s*+V%"c)C01C	ND)
c)*


O# "#!"!+#    	rA   )rB   rC   rD   rF  r   r   r   rE   r\   r9  r   r   rS   rT   r?  rF   rA   r?   r)  r)    sU     $$K+ $;L B6:*X  rA   r)  c                       e Zd ZdZed        Zej                  j                  d        Z	ej                  j                  d        Zy)CompositeKeyReflectionTestTc                 2   t        d|t        dt              t        dt              t        dt        j                  d            t        j                  dddd      d d	      }t        d
|t        dt        d      t        dt              t        dt              t        dt        j                  d            t        j                  g d|j                  j                  |j                  j                  |j                  j                  gd      d d		       y )Ntb1rK   attrrl   rj  pk_tb1r  Tr[  tb2rL   pidpattrpnamerI  rG  rH  fk_tb1_name_id_attr)r   r   r   r[  rq   ro   r  r   r   rl   rK   rD  )r>   r[   rC  s      r?   r\   z(CompositeKeyReflectionTest.define_tables  s    4!67#69,,R01##FD&xH	
 	4d35'"7G$7I--b12##)SUUXXsuuzz2*
 	
rA   c                     t        |      }|j                  | j                  j                  j                        }t        |j                  d      g d       y )Nr  rl   rK   rD  )r   r&  r   rC  rl   r   r  )r}   r   r   rM   s       r?   test_pk_column_orderz/CompositeKeyReflectionTest.test_pk_column_order  sA     z",,T[[__-A-ABKOO124JKrA   c                     t        |      }|j                  | j                  j                  j                        }t        t        |      d       |d   }t        |j                  d      g d       t        |j                  d      g d       y )Nr   r   r  rM  r  rJ  )r   r)  r   rF  rl   r   rV  r  )r}   r   r   foreign_keysr  s        r?   test_fk_column_orderz/CompositeKeyReflectionTest.test_fk_column_order  sn     z",,T[[__-A-ABCq!QEII()+ABEII+,.GHrA   N)rB   rC   rD   r   rE   r\   r   rS   rJ  rN  r   rQ  rF   rA   r?   rA  rA    s^     $
 
6 77L 8L 77I 8IrA   rA  )rG  rg  rQ  r  r   rH   r   r  r	  r)  rA  r   )Irp  r  r  r9   ro   rL  r   r   r   r   r   r	   r
   r   r   	provisionr   r   rR   r   r   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+   r,   r[   rN  
TablesTestr/   rH   r   TestBaser   r   r  rE  rG  rQ  rg  r  ComputedReflectionFixtureTestr	  r)  rA  __all__rF   rA   r?   <module>rZ     s     	       $    + /              "    ! # *   ' & & %     %h11  U:* U:pJ
8&& J
ZdG8,, dGN#GH-- #GLT0X00 T0n1<n0n.E n0b?2,** 2,jsI?H4E4E sIl(:,, (:V^XCC ^BJX00 JZ.I!4!4 .IbrA   