
    )f                       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m/Z/ d(\  Z0Z1 G d) d*ejd                        Z3 G d+ d,e3      Z4 G d- d.ejd                        Z5 G d/ d0ejl                        Z7 G d1 d2ejd                        Z8d3 Z9 G d4 d5e,e3      Z: G d6 d7ejl                        Z; G d8 d9e+ejl                        Z< G d: d;ejd                        Z= G d< d=ej|                        Z? G d> d?ejd                        Z@ G d@ dAejd                        ZAdBZBy)C    N   )config)engines)eq_)expect_raises)expect_raises_message)expect_warnings)fixtures)is_)get_temp_table_name)temp_table_keyword_args)Column)Table   )event)
ForeignKey)func)Identity)inspect)Integer)MetaData)String)testing)types)	Inspector)
ObjectKind)ObjectScope)NoSuchTableError)UnreflectableTableError)DDL)Index)quoted_name)BLANK_SCHEMA)ComparesIndexes)ComparesTables)is_false)is_true)mockNNc                       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
sqlalchemyr-   r   testing_enginedict
StaticPooldb)clsr-   s     e/var/www/html/flask-app/venv/lib/python3.12/site-packages/sqlalchemy/testing/suite/test_reflection.py
setup_bindz"OneConnectionTablesTest.setup_bind7   sI    
 66>>'))tgF  99    N)__name__
__module____qualname__classmethodr<    r=   r;   r+   r+   6   s     r=   r+   c                   B   e 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)HasTableTestTc                    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schemasr4   r   test_schemaview_reflectiondefine_viewshas_temp_tabledefine_temp_tablesr:   metadatas     r;   define_tableszHasTableTest.define_tablesI   s    4d366":&		
 ##++tW$7vvbz*)) ++X&**22""8, 3r=   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   rO   rP   r4   r   rQ   )r:   rW   querys      r;   rS   zHasTableTest.define_views_   s    CX~s5z:X}c..AB##++ &&&&  LL>3u:>LL%););<= ,r=   c                 b    t        t        t        j                  dt        j                         S N	user_tmp_r   r   r9   identr:   s    r;   temp_table_namezHasTableTest.temp_table_nameu   %    "FII6<<.9
 	
r=   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 )
NrG   TrH   namerK   rZ   =create temporary view user_tmp_v as select * from user_tmp_%sr[   drop view user_tmp_v)r   r   r9   re   r   r   saINTVARCHARr   rO   rR   r4   temporary_viewsr   r]   r    rc   r:   rW   kw
table_nameuser_tmps        r;   rU   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 5r=   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)NrF   rL   nonexistent_table)r   r9   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)NrF   	new_tablecol)r   r   r9   r'   rw   r   r   r   r&   createclear_cachedrop)ry   rW   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)NrF   rM   rL   rt   )r   r9   ru   r&   rv   rw   rQ   r'   rx   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)NrF   nonexistent_schemarM   )r   r9   ru   r&   rv   rw   rx   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'   rw   ry   
connectionr   s      r;   test_has_table_viewz HasTableTest.test_has_table_view   s    z"t$%r=   c                 n    t        |      }| j                         }t        |j                  |             y N)r   re   r'   rw   )ry   r   r   re   s       r;   test_has_table_temp_tablez&HasTableTest.test_has_table_temp_table   s+    z"..0/0r=   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"|,-r=   c                 l    t        |      }t        |j                  dt        j                               y r   )r   r'   rw   r   rQ   r   s      r;   test_has_table_view_schemaz'HasTableTest.test_has_table_view_schema   s'     z"tV%7%789r=   N)r>   r?   r@   __backend__rA   rX   rS   re   rU   r{   r   r   rO   rP   r   r   viewsr   rT   r   rR   rn   r   r   rB   r=   r;   rD   rD   F   s^   K- -*  * 
 

 O O0M  $   & & $$1 %1
 $$%%%%. & & %. :  :r=   rD   c                       e 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
)HasIndexTestTc                    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 )NrF   rG   TrH   rJ   rK   data2my_idxrM   my_idx_s)r   r   r   r   r!   crJ   r   rO   rP   r4   r   rQ   )r:   rW   tts      r;   rX   zHasIndexTest.define_tables   s    4d366":&7F2J'
 	h		"##++tW$7vvbz*))B *bddii( ,r=   rv   	inspectorkindargnamesc                 B    |dk(  rfdS t              j                  S )Nrv   c                  ^    t        j                  j                  j                  g| i |S r   )r   r9   rv   	has_index)akrz   s     r;   <lambda>z)HasIndexTest._has_index.<locals>.<lambda>   s&    699#4#4#>#>t#Ma#M1#M r=   )r   r   )ry   r   rz   s     `r;   
_has_indexzHasIndexTest._has_index   s!    9MM4=***r=   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)NrF   r   r   rt   nonexistent_idxmy_idx_2test_table_2my_idx_3foor   T)r   r!   tablesrF   r   r   r   r   r   r   __self__r   r   )ry   r   r   rW   methidxtbls          r;   test_has_indexzHasIndexTest.test_has_index   sT   tZ0L(++j11+X66&788j11
33J 6 6 8 8 > >?5'"*e$	
 	

:

:		!{"j99
;;))+j1T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 )NrF   r   rM   r   rt   nonexistent_idx_s)r   r   rQ   )ry   r   r   r   s       r;   test_has_index_schemaz"HasIndexTest.test_has_index_schema  sz     tZ0L*V5G5GHHhv7I7IJJF4F4F
 	
 -f6H6H
 	
 
r=   N)r>   r?   r@   r   rA   rX   r   combinationsr   r   r   rO   rP   r   rB   r=   r;   r   r      sr    K) )(  7	;HD+ 
! 
!: 		
 
 	
r=   r   c            	           e Zd ZdZdZ ej                  ddddd       ej                  d	dd
g       ej                  ddddd      d                      Zy) BizarroCharacterFKResolutionTestztests for #10275T)rG   )z(3))zcol%p)z[brack]
columnnamer   use_compositeF)plain)z(2))z
per % cent)z
[brackets]	tablenamec                 `   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 )NrG   T)keyrI   test_needs_fkid2rH   otherrefref2autoload_withr      )r   r   r   append_columnrk   ForeignKeyConstraintr   rG   r   r   
create_allr   r   r   
referencesr   )
ry   r   rW   r   r   r   r   m2o2t1s
             r;   test_fk_refz,BizarroCharacterFKResolutionTest.test_fk_ref-  sT    :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 r=   N)	r>   r?   r@   __doc__r   r   r   	variationr   rB   r=   r;   r   r   (  su    KW:|l Wu6W(1 7(1r=   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d	        Ze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 ' onerG   rh   rK   rJ   
related_idzpk quote ' onerh   zix quote ' onezuq quote' onez
related.idzfk quote ' onezname != 'foo'zck quote ' onezquote ' one commentT)commentr   quote " twozpk quote " twozix quote " twozuq quote" twozfk quote " twozck quote " two zquote " two commentrelatedrH   r   r\   view %s AS SELECT * FROM rZ   r[   zDROP VIEW %s)r   r   r   r   rk   PrimaryKeyConstraintr!   UniqueConstraintr   CheckConstraintr   rO   symbol_names_w_double_quoter4   view_column_reflectionr   r9   rv   identifier_preparerquoter   r]   r    )r:   rW   namesrh   r^   s        r;   rX   z$QuotedNameArgumentTest.define_tablesg  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%,	 ;r=   c                 n     t        j                  ddt         j                  j                  f      |       S )N)r   r   )r   r   rO   r   )fns    r;   quote_fixturesz%QuotedNameArgumentTest.quote_fixtures  s:    
w##G,,HHI
  	r=   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   r9   r   rO   reflect_table_optionsr4   get_table_optionsr'   
isinstancer7   r   NotImplementedError)ry   rh   r   ress       r;   test_get_table_optionsz-QuotedNameArgumentTest.test_get_table_options  sr    vyy!1199((.CJsD)*23 3,,T23 3 3s   8BBc                 b    t        t        j                        }|j                  d|z        sJ y )Nr   )r   r   r9   get_view_definitionry   rh   r   s      r;   test_get_view_definitionz/QuotedNameArgumentTest.test_get_view_definition  s+     vyy!''	D(8999r=   c                 \    t        t        j                        }|j                  |      sJ y r   )r   r   r9   get_columnsr   s      r;   test_get_columnsz'QuotedNameArgumentTest.test_get_columns  $    vyy!%%%r=   c                 \    t        t        j                        }|j                  |      sJ y r   )r   r   r9   get_pk_constraintr   s      r;   test_get_pk_constraintz-QuotedNameArgumentTest.test_get_pk_constraint  s$    vyy!%%d+++r=   c                 \    t        t        j                        }|j                  |      sJ y r   )r   r   r9   get_foreign_keysr   s      r;   test_get_foreign_keysz,QuotedNameArgumentTest.test_get_foreign_keys  s$    vyy!$$T***r=   c                 \    t        t        j                        }|j                  |      sJ y r   )r   r   r9   get_indexesr   s      r;   test_get_indexesz'QuotedNameArgumentTest.test_get_indexes  r   r=   c                 \    t        t        j                        }|j                  |      sJ y r   )r   r   r9   get_unique_constraintsr   s      r;   test_get_unique_constraintsz2QuotedNameArgumentTest.test_get_unique_constraints  s&     vyy!**4000r=   c                 \    t        t        j                        }|j                  |      sJ y r   )r   r   r9   get_table_commentr   s      r;   test_get_table_commentz-QuotedNameArgumentTest.test_get_table_comment  s&     vyy!%%d+++r=   c                 \    t        t        j                        }|j                  |      sJ y r   )r   r   r9   get_check_constraintsr   s      r;   test_get_check_constraintsz1QuotedNameArgumentTest.test_get_check_constraints  s&     vyy!))$///r=   N)r>   r?   r@   run_create_tablesr   rA   rX   r   r   r   rO   r   r   r   r  r  r  unique_constraint_reflectionr  comment_reflectionr  check_constraint_reflectionr  rB   r=   r;   r   r   c  s+   KP Pd 3 3 ,,: - : & & , , + + & & 221 3 1 ((, ) , 110 2 0r=   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   rQ   rB   r=   r;   r   z$_multi_combination.<locals>.<lambda>  s    F&& r=   rN   r   r0   r   TF
use_filter)r   r   rO   rP   r   DEFAULT	TEMPORARYANYr   TABLEVIEWMATERIALIZED_VIEWANY_VIEW)r   rN   r0   r   filter_namess        r;   _multi_combinationr!    s    !!&$$	
 F   	E $$:??*:777	D ''elKL%\"-./00r=   c                   H   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*               Z8d_d+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                  d2de!jD                  j\                  fd$#      e!jD                  jZ                  d4               ZBe!jD                  j                  e!jD                  j\                  d5               ZD e!jX                  d2de!jD                  j\                  fd$#      e!jD                  j                  d6               ZF e!jX                  d7d8d9#      e!jD                  j                  e!jD                  j                  e!jD                  j                  d:                             ZIe!jD                  jv                  e!jD                  j                  d;               ZKe!jD                  j                  d<        ZM e!jX                  de!jD                  j\                  fd2d$#      e!jD                  j                  d=               ZNe!jD                  jf                   e!jX                  d2de!jD                  j\                  fd$#      d>               ZOe!jD                  jf                  d?        ZPe!jD                  j                  d@        ZR e!jX                  de!jD                  j\                  fd2d$#      dA        ZS e!jX                  de!jD                  j\                  fd      dB        ZTe!j                  dC        ZVe!jD                  j                  eXdD               ZYe!jD                  jl                  eXdE               ZZdF Z[d`dGZ\dadHZ]eXdI        Z^e!jD                  j                  eXdJ               Z_dK Z`e!jD                  jZ                  eXdL               Zae!jD                  j                  eXdM               Zbe!jD                  j                  eXdN               Zce!jD                  j                  eXdO               Ze e!jX                  dPe!jD                  j                  fdQdRe!jD                  j                  fdSe!jD                  jZ                  fdTe!jD                  j                  fdUe!jD                  j                  fdVe!jD                  j                  fdWe!jD                  jl                  fdX#	      dY        ZfdZ Zg e!jX                  ddd$#       e!jX                  de!jD                  j                  fdd[#      d\               Zie!jD                  jl                  d]        Zje!jD                  j                  d^        Zly)bComponentReflectionTestNTc                     | j                  |d        t        j                  j                  j                  r+| j                  |t        j
                  j                         y y r   )define_reflected_tablesr   rO   rP   r4   r   rQ   rV   s     r;   rX   z%ComponentReflectionTest.define_tables  sF    ##Hd3##++'''..2L2LM ,r=   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   rB   usersuser_idTrH   test1   Fnullabletest2parent_user_id	test2 > 0zz_test2_gt_zerousers check constraintrh   r   test2 <= 1000rN   r   
dingalingsdingaling_id
address_idz%semail_addresses.address_idzz_email_add_id_fgdi fk commentid_userrJ      )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_testrG   
id comment)rI   r   data % commentr   d2)Comment types type speedily ' " \ '' Fun!d3*   Comment
withescapesthe test % ' " \ table comment)rN   r   no_constraints"no
constraintshasescapedcommentlocal_table	remote_idz%s.remote_table_2.id)r   rN   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   rO   self_referential_foreign_keysr4   r   r   r   rk   rl   CHARFloatr   r   r   r   r   r+  r   cross_schema_fk_reflectionr   rQ   r9   rv   default_schema_nameindex_reflectionr!   r,  r0  indexes_with_ascdescreflect_indexes_with_ascdescr^  descr   rS   temp_table_reflectionrU   )r:   rW   rN   schema_prefixparent_id_argsr*  r]  r_  s           r;   r%  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vr=   c                 b    t        t        t        j                  dt        j                         S r`   rb   rd   s    r;   re   z'ComponentReflectionTest.temp_table_name  rf   r=   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 )NrG   TrH   rh   rK   r   user_tmp_uq_r   user_tmp_ixrZ   ri   r[   rj   )r   r   r9   re   r   r   rk   rl   rm   r   rc   r!   r   rO   rR   r4   rn   r   r]   r    ro   s        r;   rU   z*ComponentReflectionTest.define_temp_tables  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 5r=   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 )Nr8  r*  rC  r8  r'  _vzMATERIALIZED r(  zCREATE zVIEW r   rZ   	mat_indexoraclezCREATE INDEX z ON z(data)r[   zDROP )	r   rO   materialized_viewsr4   setr   r]   r    against)r:   rW   rN   materializedrq   fullname	view_nameprefixr^   
index_namer   s              r;   rS   z$ComponentReflectionTest.define_views  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#	r=   c                     i }t         j                  |v r|j                  |       t         j                  |v r|j                  |       t         j                  |v r|j                  |       |S r   )r   r  updater  r  )ry   r   r   r   rz  r   s         r;   _resolve_kindz%ComponentReflectionTest._resolve_kind  sX    t#JJv??d"JJu''4/JJ|$
r=   c                    t         j                  j                  j                  s!|j	                          |j	                          y t         j                  j
                  j                  s"|j                  |       |j	                          y y r   )r   rO   r   r4   clearrw  r  )ry   r   rz  s      r;   _resolve_viewsz&ComponentReflectionTest._resolve_views  s^    66>> KKM!!44<<LL&  =r=   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)NTrB   )_s    r;   r   z8ComponentReflectionTest._resolve_names.<locals>.<lambda>%  s    r=   c                     d| d   vS Ntmpr   rB   r   s    r;   r   z8ComponentReflectionTest._resolve_names.<locals>.<lambda>'  s    U!A$%6 r=   c                     d| d   v S r  rB   r  s    r;   r   z8ComponentReflectionTest._resolve_names.<locals>.<lambda>)  s    Uad] r=   rX  rZ  rV  r]  r_  r   r   )r   r  r  r   r   rQ   re   rO   re  r4   addr  rg  rk  temp_table_namesrn   items)
ry   rN   r0   r   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   r*  r8  rC  rJ  rT  rV  rX  rZ  r]  r_  r(   r  r  re   r  r  )	ry   rN   r0   r   r   rz  r   r   r   s	            r;   exp_optionsz#ComponentReflectionTest.exp_optionsO  s=     0$((;()488Y\"DHH

 	E<0Wtxx\"DHH&'^$dhh%&]#TXX^$dhh%&+,dhh)*DHHT))+,dhh
   vulC!!&%sC
r=   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   r*  r8  rC  rJ  rS  rT  rU  rV  rX  rZ  r]  r_  )r  re   r  r  )
ry   rN   r0   r   r   emptyrz  r   r   r   s
             r;   exp_commentsz$ComponentReflectionTest.exp_commentsn  s     0%8()5Y\"E

 	E<0Wu\"E&'^$=' %&@) ]#U^$e%&+,e)*ET))+,e
"   vulC!!&%sC
r=   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)rh   autoincrementtypedefaultr   r/  omitr  )r(   r  pop)rh   autor  r   r/  r   s         r;   r~   z0ComponentReflectionTest.exp_columns.<locals>.col  s;     !%""$C v~(Jr=   c                 B    dt         j                  dd|} | fi |S )NTF)r  r  r/  r(   r  )rh   rp   r~   s     r;   pkz/ComponentReflectionTest.exp_columns.<locals>.pk  s&    488M"MBt?r?"r=   r  r9  r  )r  r/  r:  r=  rJ   r  rD  rE  r  r+  r,  r.  r0  r1  r   rG   rh   r   r*  r8  rC  rJ  rK  rM  rL  rN  rO  rP  rR  rT  rV  rW  rX  rY  rZ  r]  r^  r_  r  )ry   rN   r0   r   r   r  rz  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
r=   c                 
    h dS )N>   rh   r  r  r/  rB   ry   s    r;   _required_column_keysz-ComponentReflectionTest._required_column_keys  s    66r=   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 )Nr5  c                      t        |      | |dS )N)constrained_columnsrh   r   )list)rh   r   colss      r;   r  z+ComponentReflectionTest.exp_pks.<locals>.pk  s    '+Dz" r=   r   r  r9  r  r  r   r*  r+  r8  rC  r:  rH  rI  rJ  rG   rT  rV  rX  rZ  r]  r_  rh   )r(   r  r   rO   materialized_views_reflect_pkr4   r  re   reflects_pk_namesr  r  r  )ry   rN   r0   r   r   r  r  rz  r   r   valr   s               r;   exp_pkszComponentReflectionTest.exp_pks  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
r=   c                 
    ddhS )Nrh   r  rB   r  s    r;   _required_pk_keysz)ComponentReflectionTest._required_pk_keys&  s    -..r=   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   r9   rv   rf  )ry   r   s     r;   __eq__z2ComponentReflectionTest.exp_fks.<locals>.tt.__eq__2  s,    TM Fyy((<<Er=   Nr>   r?   r@   r  rB   r=   r;   r   r  1  s    r=   r   c                 F    | ||t         j                  ||n        ||dS )N)r  referred_columnsrh   r1   referred_schemareferred_tabler   r  )r  ref_col	ref_table
ref_schemarh   r   r   s         r;   fkz+ComponentReflectionTest.exp_fks.<locals>.fk8  s1     (,$+88","8Jbd"+"
 
r=   r  r  r  r   r*  r1  r+  r)  r   r8  r=  r:  rC  r;  r<  r5  rD  rJ  rT  rV  rW  rG   rZ  )r  rX  rY  r]  r_  rh   )r(   r  r  r   rQ   re   r   rO   rb  r4   r  named_constraintsr  r  r  )ry   rN   r0   r   r   r  rz  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
r=   c                 
    h dS )N>   rh   r  r  r  r  rB   r  s    r;   _required_fk_keysz)ComponentReflectionTest._required_fk_keys  s    
 	
r=   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)r?  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 )NrB   )r?  column_namesrh   dialect_optionsinclude_columnsr  r  expressionsduplicates_constraint)	r   rO   foreign_keys_reflect_as_index#unique_constraints_reflect_as_index*reflect_indexes_with_ascdesc_as_expressionr4   r  r(   r  )rh   r?  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   rJ   ru  r   r*  r1  r)  T)rh   r  r+  r0  r,  r\  r[  )rh   r?  r8  )rh   r?  r  r=  r:  r9  rA  rC  rE  rD  rJ  rT  rV  rW  rX  rY  rZ  r]  r^  r`  )rj  )rh   r  r_  ra  r   rq  rh   rp  )rh   r  r?  )r  extendr(   r  re   r   rc   r   rO   rh  r4   ri  r  r  r  )
ry   rN   r0   r   r   r   rz  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
r=   c                 
    h dS )N>   rh   r?  r  rB   r  s    r;   _required_index_keysz,ComponentReflectionTest._required_index_keys  s    11r=   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 )NrB   )r  rh   r   r  )r   rO   *unique_index_reflect_as_unique_constraintsr4   r  )rh   r  r  r   r  reqr   s          r;   ucz+ComponentReflectionTest.exp_ucs.<locals>.uc  sL     ""MMC $T
"C
  *:&'5Lr=   r  r  r  r   r*  r,  r0  r[  T)rh   r  r  r8  rJ   )rh   r  r:  r9  rA  rB  )rh   r  r   rC  rJ  rT  rV  rX  rZ  r]  r_  rh   rp  r   )r  r(   r  re   r   rc   r  r  )ry   rN   r0   r   r   all_r  rz  r   r   r   s              r;   exp_ucszComponentReflectionTest.exp_ucs  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Jr=   c                 
    ddhS )Nrh   r  rB   r  s    r;   _required_unique_cst_keysz1ComponentReflectionTest._required_unique_cst_keysJ  s    ''r=   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(r(  )`)lowerreplace)ry   r   r   s      r;   r  z2ComponentReflectionTest.exp_ccs.<locals>.tt.__eq__V  s@    KKMWS"%WS"%WS"%	  s{"r=   Nr  rB   r=   r;   r   r  U  s    #r=   r   c                      |       ||dS )N)sqltextrh   r   rB   )r  rh   r   r   s      r;   ccz+ComponentReflectionTest.exp_ccs.<locals>.cc_  s    !$x'JJr=   r  r  r  r   r*  r6  r2  r3  r4  rM  r8  z$address_id > 0 and address_id < 1000r@  r   rC  rJ  rT  rV  rX  rZ  r]  r_  r   )strr  r(   r  re   r  r  )ry   rN   r0   r   r   r  rz  r   r   r   r   s             @r;   exp_ccszComponentReflectionTest.exp_ccsN  sK   	# 	#	K
  0"5()2Y\"B

 	E<0W?DHH-&4  \":-% &'^$b%&]#R^$b%&+,b)*BT))+,b/
2   vulC!!&%sC
r=   c                 
    ddhS )Nrh   r  rB   r  s    r;   _required_cc_keysz)ComponentReflectionTest._required_cc_keys  s    	""r=   c                     t        |      }t        t        j                  j                  |j                         v        y r   )r   r'   r   r   rQ   get_schema_namesr   s      r;   test_get_schema_namesz-ComponentReflectionTest.test_get_schema_names  s,    z"**d.C.C.EEFr=   c                     t        |      }t        |j                  t        j                  j
                               t        |j                  d             y )Nsa_fake_schema_foo)r   r'   
has_schemar   r   rQ   r&   r   s      r;   test_has_schemaz'ComponentReflectionTest.test_has_schema  s9    z" : :;<!567r=   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   rQ   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Fr=   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   rQ   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7r=   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 )Nrf  )r   r6   r   hasattrrv   )ry   engines     r;   test_dialect_initializez/ComponentReflectionTest.test_dialect_initialize  s,    '')v~~'<===r=   c                 n    t        |      }t        |j                  |j                  j                         y r   )r   r   rf  rv   r   s      r;   test_get_default_schema_namez4ComponentReflectionTest.test_get_default_schema_name  s(    z"D$$j&8&8&L&LMr=   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>   rV  rJ  rX  rT  rZ  r_  r]  r   r  rs  )r8  rC  r*  )r   rQ   r   get_sorted_table_and_fkc_namesget_table_namesr   sorted)ry   r   r  r  rN   _ignore_tablesr   recr   ttable_names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   rQ   get_view_namesr   rO   rw  r4   r   r  get_materialized_view_names)ry   r   r  r   rN   r  r  s          r;   test_get_view_namesz+ComponentReflectionTest.test_get_view_names  s     z"''FF))&1..66{#&99%EF008>:JKEF{#V,r=   c                     t        |      }|j                         }t        t        |      dt        j
                   g       y r`   )r   get_temp_table_namesr   r  r   rc   ry   r   r   r  s       r;   test_get_temp_table_namesz1ComponentReflectionTest.test_get_temp_table_names  s9    z"446F#$6<<.'A&BCr=   c                 f    t        |      }|j                         }t        t        |      dg       y r   )r   get_temp_view_namesr   r  r'  s       r;   test_get_temp_view_namesz0ComponentReflectionTest.test_get_temp_view_names  s/     z"335F#$|n5r=   c                 &    | j                  |       y r   )_test_get_commentsry   r   s     r;   test_get_commentsz)ComponentReflectionTest.test_get_comments  s    
+r=   c                 X    | j                  |t        j                  j                         y r   )r-  r   r   rQ   r.  s     r;   test_get_comments_with_schemaz5ComponentReflectionTest.test_get_comments_with_schema  s     	
GNN,F,FGr=   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 )NrM   rJ  r*  )r   r  r   r  r   rT  rh   )ry   r   rN   r   expno_csts         r;   r-  z*ComponentReflectionTest._test_get_comments"  s    z"v."">&"A()	

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

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

 ++00""6&"9 !	
r=   )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  r*  rC  rM   r   rh   r  rv  r  z), r  r  )"r   rQ   r   r*  rC  r   zipr   r'   len	enumeratecolumnsr   rh   	__class__r  r   rk   r   
TypeEnginer   ry  	sql_typesDateDateTimerx  __mro__intersectionr   NumericTimer   _BinaryrI   )ry   r   	use_viewsr  rN   r*  	addressesr  r   rq   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5Q(6/	6r=   c                     | j                         }| j                  |   }t        |t               |      }| j	                  ||d       y )Nr   F)strict_constraints)re   r   r   r   assert_tables_equal)ry   r   rq   rr   reflected_user_tmps        r;   test_reflect_table_temp_tablez5ComponentReflectionTest.test_reflect_table_temp_table  sO    ))+
;;z*"
*
 	  (U 	! 	
r=   c                 .   | j                         }| j                  |   }t        |      }|j                  |      }t	        t        |      dkD  t        |             t        |j                        D ]!  \  }}t        |j                  ||   d          # y )Nr   rh   )
re   r   r   r   r'   r8  r9  r:  r   rh   )ry   r   rq   rr   r   r  rI  r~   s           r;   test_get_temp_table_columnsz3ComponentReflectionTest.test_get_temp_table_columns  s    ))+
;;z*z"
+D	As4y) 0 01 	+FAs$q'&/*	+r=   c                     t        |      }|j                  d      }t        |D cg c]  }|d   	 c}g d       y c c}w )Nr   rh   )rG   rh   r   )r   r   r   )ry   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)NrM   r  rh   rH  )r   r   rQ   r   r*  rC  r   r  r  rh   _check_listr  r   rO   r  fail_ifrT  )ry   r   r  rN   r*  rF  r   r3  
users_cons	addr_consexp_colsr4  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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)NrM   r   rh   r)  r  r  r  r+  r  r1  rD  )r   rQ   r   r*  rC  r   r   rO   rb  r4   r  rh   r  rX  r   implicitly_named_constraintsr'   rT  )ry   r   r  rN   r*  rF  r   expected_schemausers_fkeysfkey1
addr_fkeysr4  s               r;   r  z-ComponentReflectionTest.test_get_foreign_keys  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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  rG   r  rW  rM   rY  )r   rv   rf  r   r   rQ   r   r  rh   r   r8  r'   )
ry   r   rV  rX  rZ  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'(:,7r=   c                 x   |rt         j                  }nd }t        |      }|j                  d|      }| j	                  |      }| j                  |||df   | j                         | j                  j                  j                  }| j                  |j                  ||      |||f   | j                         y )Nr*  rM   )
r   rQ   r   r  r  rW  r  r   rT  rh   )ry   r   r  rN   r   indexesr3  r4  s           r;   r  z(ComponentReflectionTest.test_get_indexes  s    
 ''FF z"""76":f-S&'*+T-F-F	
 ++00VF3 !%%	
r=   )r]  r`  )r_  ra  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  rW  r  r   r   r   r8  rh  r   r  rG  rh   )ry   r   tnameixnamer   rh  expected_indexesr  s           r;   test_get_noncol_indexz-ComponentReflectionTest.test_get_noncol_index0  s     z"""5)  ++-tUm<"2D4M4MN%:>C		NADOA$$a(DOA##V,r=   c                     t        |      }| j                         }|j                  |      }| j                  d      d |f   }| j	                  ||| j
                         y )NT)r  )r   re   r
  r  rW  r  )ry   r   r   rh   	reflectedr3  s         r;   &test_get_temp_table_unique_constraintsz>ComponentReflectionTest.test_get_temp_table_unique_constraintsF  s]     z"##%//5	lll%tTl3C)B)BCr=   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   rq  )r?  r  rh   r   r  rh   )	r   re   r  r  r   rO   index_reflects_included_columnsr4   r   )ry   r   r   rq   rh  indexpectedr   s           r;   test_get_temp_table_indexesz3ComponentReflectionTest.test_get_temp_table_indexesO  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 ]R  \  }}|j'                  dd       }|r|
j)                  |       t!        |j'                  dd       d        t!        ||       T 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   )rh   r  unique_a_b_c)r   br   unique_c_a_b)r   r   ry  unique_asc_keyascr   zi.have.dotsry  zi have spacesr   rh   r   testtblrF  r>  rM   r  r  r   )r   rN   )r   rQ   r  operator
itemgetterr   r   rk   r   r   append_constraintr   r   r   r
  rx  r   r8  r7  r  r  r   rh  rh   constraintsr   
differencerA  r   rT  )ry   rW   r   r  rN   uniquesrG  r  r   ro  names_that_duplicate_indexr  refldupereflected_metadatar   	idx_namesuquq_namesr4  s                       r;   r  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dO	 &Z$	
	 *3):):;#SXX;	;  ++
"b112 GG
 *n%
&	 	 ))(33%*I6#% ++00D''v'>C <
s   $K:-K?c                     |rt         j                  }nd }t        |      }dD ])  }|j                  ||      }t	        t        |             + y )Nr6  rM   )r   rQ   r   r   r'   bool)ry   r   r  rN   r   viewr  s          r;   r   z0ComponentReflectionTest.test_get_view_definition  sQ    
 ''FFz"D 	D((f(=ADG	r=   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_existr*  )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.

        ))r*  r+  )rC  r:  )r8  r9  rh   r  TN)r   r   get)ry   r   r   rj  cnamer  r   id_s           r;   test_autoincrement_colz.ComponentReflectionTest.test_autoincrement_col  sh     z"
 	2LE5
 ##E*D)-.A1V9a<.u5C77?D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)Nr*  rM   rT  )r   r   r9   rQ   r   rO   r   r4   r   r'   r   r7   r   r   )ry   r  r   rN   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 E,,WV,DE E E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)NrM   )r   r   r9   r   rO   r   r4   rQ   get_multi_table_optionsr  r   r   r   r   )ry   r  r   rN   r   rG  r3  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 52245 55 5s   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 )NrC  )r0   r   )rJ  r*  does-not-existr  r  r  rN   r   )rN   r0   r   r   r0   r   )r   r   r  r  r  r  r  r   r  copyr  append)rN   r0   r   r  single_reflect_fn
exp_methodr   rp   r   r3  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0r=   rB   )ry   r   r  s    ` r;   get_multi_expz%ComponentReflectionTest.get_multi_exp
  s    ,	1\ r=   c                      |||||t         j                  | j                        \  }}}|D ]0  }	|j                           |j                  di |	}
t        |
|       2 y NrB   )r   r   r  r   r  r   ry   r  rN   r0   r   r  r   r  r3  rp   results              r;   #test_multi_get_table_options_tablesz;ComponentReflectionTest.test_multi_get_table_options_tables<  sn    
 '''
c3  	B1T117B7F	r=   c                      |||||t         j                  | j                        \  }}}|D ].  }	|j                          t	         |j
                  di |	|       0 y r  )r   r  r  r   r   get_multi_table_comment)
ry   r  rN   r0   r   r  r   r  r3  rp   s
             r;   test_get_multi_table_commentz4ComponentReflectionTest.test_get_multi_table_commentN  sj    
 '''
c3  	9B,,,2r2C8	9r=   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['\" ]r(  )resubr  )r  s    r;   _cleanz:ComponentReflectionTest._check_expressions.<locals>._clean`  s    66)R.4466r=   )r  r   r7   r   r  )ry   r  r3  err_msgr  er  s          r;   _check_expressionsz*ComponentReflectionTest._check_expressions_  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   r8  r7  rx  r  )	ry   r  r3  req_keysmsgrr  r   r  s	            r;   rW  z#ComponentReflectionTest._check_listh  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5r=   c                     t        t        |j                               t        |j                                      |D ](  }||   ||   }}|r|g|g}}| j                  ||||       * y r   )r   rx  keysrW  )ry   r  r3  r  
make_listsr   r  r  s           r;   _check_table_dictz)ComponentReflectionTest._check_table_dictv  se    CCHHJ0 	0A!9c!fqAsQC1Q8Q/		0r=   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_columns~  s~     '!!
c3  	LB+T++1b1F""630J0JK	Lr=   c                      |||||t         j                  | j                        \  }}}|D ]C  }	|j                           |j                  di |	}
| j                  |
|| j                  d       E y )NT)r  rB   )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 # 	r=   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)rh   N)r  r(   r  ).0r  s     r;   	<genexpr>z7ComponentReflectionTest._adjust_sort.<locals>.<genexpr>  s+      ,>?f$)99,s   -/r}  )r   rO   r]  r4   r  r8  anysort)ry   r  rt  r   objr  s         r;   _adjust_sortz$ComponentReflectionTest._adjust_sort  su    <<DD) *::< *C3x!| ,CF, ) S)	** Er=   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 r=   rB   )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r=   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r=   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 r=   rB   )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r=   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 r=   rB   )r   r  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r=   r   r   r  r  r  r
  r  r  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   )ry   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;r=   r  r  r  )r   r  r(   patchobjectr   r   r   reflect_tabler   r   )ry   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)rN   r   resolve_fksr'  )r   r   rQ   reflectr   r  r"  r#  r   r   r  r   )	ry   r   r  r   mrN   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   é試蛇ẟΩrM  emojiu	   ☁️✨u   試蛇ẟΩ✨r  rh   r   )r  r  r   r   r   r   r   r  r   r   )	ry   r   rW   r   tcr  r   valuer3  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 )
Nr  r  u&   🐍🧙🝝🧙‍♂️🧙‍♀️rM  u&   🎩🁰🝑🤷‍♀️🤷‍♂️r  r   rh   r   r  )ry   r   rW   r   r  r   s         r;   test_comments_unicode_fullz2ComponentReflectionTest.test_comments_unicode_fullO	  s    7G-UV<		
 	J'z"##$67BABC/03QvY)%1Y'Z[r=   r   r)   )NF)mr>   r?   r@   run_insertsrun_deletesr   rA   rX   r%  re   rU   rS   r  r  r  r   r  r   r  r  r  propertyr  r  r  r  r  r  r  r  r  r  r  r   rO   schema_reflectionr  r  r  r	  schema_create_deleter  r  r  r   !foreign_key_constraint_reflectionrP   r   r$  r  r(  rR   rn   r+  r  r/  r1  r-  r   rk  rP  rR  r   rT  !primary_key_constraint_reflectionr  r  re  rf  rg  r  rh  ri  rm  r  rp  temp_table_reflect_indexesru  r  r   r  table_reflectionr  r   r  fixturer  r   r!  r  r  r  rW  r  r  r  r  r  r  r  r  r  r  r  r   r  r  comment_reflection_full_unicoder  rB   r=   r;   r#  r#    s9    $$K+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4))112\ 77$> 8$>L 00"8  1"8H W4))112\ &&
 '
, W3/
 &&**22- 3 + '- ++22D 3 ,D 00
 1
  W	w''((\ 22TD 3TDl %%W4))112\ & %%. &. &&2 '20 W	w''((\EE W4!1!1!9!9:EB5 C5 __/ /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\r=   r#  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   ry   r   rW   s      r;   table_no_columnsz#TableNoColumnsTest.table_no_columnse	  s    gx J'r=   c                     t        d|       t        j                  |dt        d             t        j                  |dt        d             |j	                  |       y )Nr  rZ   z*CREATE VIEW empty_v AS SELECT * FROM emptyr[   zDROP VIEW IF EXISTS empty_v)r   r   r]   r    r   r  s      r;   view_no_columnsz"TableNoColumnsTest.view_no_columnsj	  sR    gx <=	
 	mS)F%G	
 	J'r=   c                 n    t        dt               |      }t        t        |j                        g        y )Nr  r   r   r   r   r  r   )ry   r   r  t2s       r;   test_reflect_table_no_columnsz0TableNoColumnsTest.test_reflect_table_no_columnsz	  s$    7HJjADJr=   c                     t        |      }t        |j                  d      g        |j                         }t        |dg i       y )Nr  r  )r   r   r   r  )ry   r   r  r   multis        r;   !test_get_columns_table_no_columnsz4TableNoColumnsTest.test_get_columns_table_no_columns~	  s>    z"DW%r*&&(EOR()r=   c                     t               }|j                  |       t        |j                        j	                  dg      sJ y r  )r   r  rx  r   rA  )ry   r   r  r  s       r;   "test_reflect_incl_table_no_columnsz5TableNoColumnsTest.test_reflect_incl_table_no_columns	  s3    J			*188}))7)444r=   c                 n    t        dt               |      }t        t        |j                        g        y )Nempty_vr   r  )ry   r   r  r  s       r;   test_reflect_view_no_columnsz/TableNoColumnsTest.test_reflect_view_no_columns	  s$    9hj
CDJr=   c                     t        |      }t        |j                  d      g        |j                  t        j
                        }t        |dg i       y )Nr  )r   )Nr  )r   r   r   r  r   r  )ry   r   r  r   r  s        r;    test_get_columns_view_no_columnsz3TableNoColumnsTest.test_get_columns_view_no_columns	  sH    z"DY',&&JOO&<E%r*+r=   N)r>   r?   r@   __requires__r   r   r	  r  r  r  r  r  rO   r   r  r!  rB   r=   r;   r  r  a	  s    1LK__( ( __( (*5
   , ,r=   r  c                       e Zd ZdZ ej
                  dej                  j                  fdd      ej                  j                  d               Z	ej                  j                  d        Zej                  j                  d        Zd Zej                  j                  d	        Zej                  j                  d
        Zej                  j                  d        Z ej
                  dddej                  j&                  fdddej                  j(                  fi ddej                  j(                  fi ddej                  j*                  fdddej                  j,                  fdddej                  j.                  fd      d        Zy)ComponentReflectionTestExtraTrU  r  r   c           
      l   |rt         j                  }nd }t        d|t        dt	                     t        j                  dd      t        j                  dd      |       t        d	|t        d
t        j                  d            |       |j                  |       t        |      }t        |j                  d|      t        j                  d            }d }|D cg c]  }|d    ||d         d }}t        |ddddddg       d	}	t        |j                  |	|      g        y c c}w )Nsa_ccr   za > 1 AND a < 5cc1r   za = 1 OR (a > 2 AND a < 5)
UsesCasingrM   rT  rJ   rF  rh   r}  c                     dj                  t        j                  d| j                         t        j                              S )N zand|\d|=|a|or|<|>)joinr  findallr  I)r  s    r;   	normalizezJComponentReflectionTestExtra.test_get_check_constraints.<locals>.normalize	  s.    88

/"$$G r=   r  )rh   r  za = 1 or a > 2 and a < 5za > 1 and a < 5)r   rQ   r   r   r   rk   r   r   r   r   r  r  r  r  r   )
ry   rW   r   r  rN   r   ro  r.  itemr4  s
             r;   r  z7ComponentReflectionTestExtra.test_get_check_constraints	  sD   
 ''FF3	"0u=,< 		
 	6299R=)		
 	J'z"&&wv&>##F+
		 "
 &\iY.HI
	 
 	%2LM+<=	
 "D&&vf&=rB
s   #D1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  xr>  yzt_idxa  long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string long string 
t_idx_longt_idx_2F)rh   r  r?  r  c                     t         j                  j                  j                  r$g | d<   j                  j
                   dg i| d<   y | j                  di        y )Nr  _includer  )r   rO   rr  r4   r  rh   r  )entryr   s    r;   completeIndexzYComponentReflectionTestExtra.test_reflect_expression_based_indexes.<locals>.completeIndex	  s\    ??GG+-'(!((--.h7,'(   !2B7r=   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  r1  r2  r  )ry   r   ols      r;   r  zbComponentReflectionTestExtra.test_reflect_expression_based_indexes.<locals>.lower_index_str.__eq__	  s)    [[]"}A#)*@sbyAr=   Nr  rB   r=   r;   lower_index_strr<  	  s    Br=   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>  )ry   r   long_strs     r;   r  zeComponentReflectionTestExtra.test_reflect_expression_based_indexes.<locals>.coalesce_index_str.__eq__ 
  s    !U[[]2Hx57HHr=   Nr  )rE  s   r;   coalesce_index_strrB  	  s	    Ir=   rF  )Nr3  Nzlower(x)zlower(y))rh   r  r  r?  zcoalesce(x, 'z')r   z>Skipped unsupported reflection of expression-based index t_idx)r   r   r   r!   r   r  r   r1  r3  r2  rD  r   r   r  r   rO    reflect_indexes_with_expressionsr4   insertr  r   r  r   r	   !compare_table_index_with_expectedr  rh   )ry   rW   r   r  r   rt  r:  r@  rF  
expr_indexexpr_index_longr   r  rE  s     `          @r;   %test_reflect_expression_based_indexeszBComponentReflectionTestExtra.test_reflect_expression_based_indexes	  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  r1  r>  r2  r4  includeF)rh   r  r  r?  r  r   r  z
%s_includer   )r   r   r   r!   r   r1  r  r  rh   r   r   r  r   r(   r  r   r  rh  )ry   rW   r   r  r   r   r  r  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		
r=   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   r9  r   r   r   r   )ry   r   rW   r   rI  type_r  r   s           r;   _type_round_tripz-ComponentReflectionTestExtra._type_round_tripX
  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   r-  )rR  r=  rB  r   r   	precisionscalery   r   rW   typs       r;   test_numeric_reflectionz4ComponentReflectionTestExtra.test_numeric_reflectionb
  sa    (()"3"3B":
 	C c9#4#455r"		1	r=   c                     | j                  ||t        j                  d            d   }t        |t        j                        sJ t	        |j
                  d       y )N4   r   )rR  r=  r   r   r   lengthrW  s       r;   test_varchar_reflectionz4ComponentReflectionTestExtra.test_varchar_reflectionk
  sO    ##)"2"22"6

 #y//00CJJr=   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   Tr.  ry  Frh   r/  )r   ry  )r   r   r   r   r   r   r   )ry   r   rW   r  r~   s        r;   test_nullable_reflectionz5ComponentReflectionTestExtra.test_nullable_reflections
  s    3$/3%0	
 	
 #:.::3? FS_, U#	
s   !A=N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onupdater1  rG   TrH   r   rG  x_idzx.idxidr   test
   userrh   rK   Fr.  tidztable.idmyfkr   r1   )r   r   r   r   r   rk   r   r   r   r  r   )
ry   r   rW   rt  rc  rd  r1   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)r>   r?   r@   r   r   r   rO   rP   r  r  indexes_with_expressionsrL  rr  rO  rR  r  rY  r]  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_restrictrm  rB   r=   r;   r$  r$  	  s   KW	w''((\ 113C 23Cj ..X
 /X
t 55(
 6(
TI && ' && ' &&
 '
  WNN		
 NN		
 NN		
 NN		
 NN		
 NN		
 .K&N3O&N3r=   r$  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   rG   rH   r  t1idzt1.id)r   r"   r   r   r   rV   s     r;   rX   z NormalizedNameTest.define_tables
  sU    D)4d3	

 	D)4d36:g./		
r=   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 )Nr  Trx  r   r   c                 &    | j                         dv S )Nr   r  r>  )rh   r  s     r;   r   zINormalizedNameTest.test_reflect_lowercase_forced_tables.<locals>.<lambda>
  s    DJJLL,H r=   )only)r   r   r"   r   r9   r   r   ry  r   rG   r  )ry   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Z


IIH 	 	
 yy  %%0041B1B1E1EFFFr=   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   r9   r  r  r   upper)ry   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)	r>   r?   r@   r"  r   rA   rX   r  r   rB   r=   r;   ru  ru  
  s)    *LK
 
G:r=   ru  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_tablerh   42with_defaultr  normalcomputed_col)r   r   r9   r   r'   r   )ry   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  rh   )rG   r  r  computedr  r  	normal+42	persisted)r   r   r9   r   r'   r   r.  r   rO   "computed_columns_reflect_persistedr4   "computed_columns_default_persisted)ry   r   r  r   rJ   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   r.  r   rO   r  r4   r   )ry   rJ   columnr  r  r  s         r;   check_columnz#ComputedReflectionTest.check_column,  sp    
d6l*+<
+DNN8I./9>>FFK8+,%y1 Gr=   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_tablerh   computed_no_flagr  computed_virtualznormal+2Fcomputed_storedz	normal-42T)r   r   r9   r   r  r   rO   r  r4   computed_columns_virtualcomputed_columns_storedry   r   r  r   rJ   s        r;   !test_get_column_returns_persistedz8ComputedReflectionTest.test_get_column_returns_persisted4  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  rM   rh   r  z	normal/42r  znormal/2Fr  z	normal*42T)r   r   r9   r   rQ   r  r   rO   r  r4   r  r  r  s        r;   -test_get_column_returns_persisted_with_schemazDComputedReflectionTest.test_get_column_returns_persisted_with_schemaO  s    vyy!#F,>,>   
 '++&	1++??GG		
 44<<"	 33;;!	 < ,s   C6N)r>   r?   r@   r  r  r  r  r   rO   rP   r  rB   r=   r;   r  r    s6    7*26  r=   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)identity_columnsr  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  id1r  r   Tr   r   rQ     alwaysstart	incrementminvaluemaxvaluecyclecacherF  )r  r  rM   )
r   r   r   r   r   rO   rP   r4   r   rQ   rV   s     r;   rX   z$IdentityReflectionTest.define_tablest  s    8W%5'8:.		
 		
" ##++x)ugxt2'FG)) ,r=   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  r  >   r  r  r  r  )	r   rO   identity_columns_standardr4   r  r  r   r8  r'   )ry   r  r3  approxcommon_keysr   s         r;   checkzIdentityReflectionTest.check  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5r=   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   r  rh   r  identityr  r  r  Fr   r  Tr  r   r   r   r  rQ  r  )	r   r   r9   r   r&   r'   r   r  r7   ry   r   r  r~   s       r;   test_reflect_identityz,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&	r=   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   rM   rh   r  r  r  r  r  TrF  r   r  Fr  r  )
r   r   r9   r   rQ   r&   r'   r   r  r7   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# "#!"!+#    	r=   )r>   r?   r@   r   r  r   r"  rA   rX   r  r  r   rO   rP   r  rB   r=   r;   r  r  n  sT     $$K+K;L B6:*X  r=   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tb1rG   attrrh   rF  pk_tb1r   Tr7  tb2rH   pidpattrpnamer  r  r  fk_tb1_name_id_attr)r   r   r   r=  rm   rk   r   r   r   rh   rG   r  )r:   rW   r  s      r;   rX   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*
 	
r=   c                     t        |      }|j                  | j                  j                  j                        }t        |j                  d      g d       y )Nr  rh   rG   r  )r   r  r   r  rh   r   r  )ry   r   r   rI   s       r;   test_pk_column_orderz/CompositeKeyReflectionTest.test_pk_column_order  sA     z",,T[[__-A-ABKOO124JKr=   c                     t        |      }|j                  | j                  j                  j                        }t        t        |      d       |d   }t        |j                  d      g d       t        |j                  d      g d       y )Nr   r   r  r  r  r  )r   r  r   r  rh   r   r8  r  )ry   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Hr=   N)r>   r?   r@   r   rA   rX   r   rO   r  r  r  r  rB   r=   r;   r  r    s]    K
 
6 77L 8L 77I 8Ir=   r  )r#  r$  r  r   r   rD   r   ru  r  r  r  )Cr  r  r5   rk   r(  r   r   r   r   r   r	   r
   r   	provisionr   r   rN   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(   rW   r*  
TablesTestr+   rD   r   TestBaser   r   r!  r#  r  r$  ru  ComputedReflectionFixtureTestr  r  r  __all__rB   r=   r;   <module>r     s    	      $    + /            "    ! # *   ' & & %    %h11  S:* S:lI
8&& I
X81x'8'8 81vR0X00 R0j1<H\n.E H\V:2,** 2,jH?H4E4E HX
(:,, (:V^XCC ^BJX00 JZ.I!4!4 .Ibr=   