ó
¿b›]c           @   s  d  d l  Z  d  d l Z d  d l Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m	 Z	 d d l m
 Z
 d d	 l m Z d d
 l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m  Z  d d l m! Z! e" e" f \ Z# Z$ d e
 j% f d „  ƒ  YZ& d e
 j% f d „  ƒ  YZ' d  e
 j% f d! „  ƒ  YZ( d d d  f Z) d S("   iÿÿÿÿNi   (   t   assert_raises_message(   t   config(   t   engines(   t   eq_(   t   expect_warnings(   t   fixtures(   t   is_(   t   Column(   t   Tablei   (   t   event(   t   exc(   t
   ForeignKey(   t   inspect(   t   Integer(   t   MetaData(   t   String(   t   testing(   t   types(   t	   Inspector(   t   DDL(   t   Index(   t   quoted_name(   t   is_false(   t   is_truet   HasTableTestc           B   s;   e  Z e Z e d  „  ƒ Z d „  Z e j j	 d „  ƒ Z
 RS(   c         C   s   t  d | t d t d t ƒt d t d ƒ ƒ ƒ t j j j r} t  d | t d t d t ƒt d t d ƒ ƒ d t	 j
 ƒn  d  S(   Nt
   test_tablet   idt   primary_keyt   datai2   t   test_table_st   schema(   R   R   R   t   TrueR   R   t   requirest   schemast   enabledR   t   test_schema(   t   clst   metadata(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   define_tables%   s    c         C   sp   t  j j ƒ  [ } t t  j j j | d ƒ ƒ t t  j j j | d ƒ ƒ t t  j j j | d ƒ ƒ Wd  QXd  S(   NR   R   t   nonexistent_table(   R   t   dbt   beginR   t   dialectt	   has_tableR   (   t   selft   conn(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_has_table6   s    c      
   C   s‹   t  j j ƒ  v } t t  j j j | d d t  j ƒƒ t t  j j j | d d t  j ƒƒ t t  j j j | d d t  j ƒƒ Wd  QXd  S(   NR   R   R   R'   (   R   R(   R)   R   R*   R+   R#   R   (   R,   R-   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_has_table_schema<   s    (   t   __name__t
   __module__R   t   __backend__t   classmethodR&   R.   R   R    R!   R/   (    (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyR   "   s   	t   ComponentReflectionTestc           B   sZ  e  Z dE Z Z e Z e d  „  ƒ Z e d „  ƒ Z	 e d „  ƒ Z
 e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e j j d „  ƒ Z e j j d „  ƒ Z e j j d „  ƒ Z e j dE d	 dE d
 „ ƒ Z e j j d „  ƒ Z e j j e j j e j j d „  ƒ ƒ ƒ Z e j j d „  ƒ Z e j j e j j d „  ƒ ƒ Z e j j d „  ƒ Z  e j j e j j! d „  ƒ ƒ Z" dE d „ Z# e j j e j j! d „  ƒ ƒ Z$ e j j% d „  ƒ Z& e j j% e j j! d „  ƒ ƒ Z' e j j e j j% d „  ƒ ƒ Z( dE d	 d „ Z) e j j d „  ƒ Z* e j d „  ƒ Z+ e j j d „  ƒ Z, e j j d „  ƒ Z- e j j e j d „  ƒ ƒ Z. e j j e j j! d „  ƒ ƒ Z/ e j j0 d „  ƒ Z1 e j j0 e j j% e j j d „  ƒ ƒ ƒ Z2 e j j% d „  ƒ Z3 e j j% e j j! d  „  ƒ ƒ Z4 e j dE d! „ ƒ Z5 e j j6 d" „  ƒ Z7 e j j e j j6 e j j! d# „  ƒ ƒ ƒ Z8 e j j e j d$ „  ƒ ƒ Z9 e j dE d% „ ƒ Z: e j j d& „  ƒ Z; e j j e j j! d' „  ƒ ƒ Z< e j j= e j j! d( „  ƒ ƒ Z> e j j? d) „  ƒ Z@ e j jA d* „  ƒ ZB e j d+ „  ƒ ZC d, „  ZD e j dE d- „ ƒ ZE e j jF d. „  ƒ ZG e j jF e j j! d/ „  ƒ ƒ ZH e j d0 „  ƒ ZI e j jF d1 „  ƒ ZJ e j jF d2 „  ƒ ZK e j jL e j d3 „  ƒ ƒ ZM e j jN d4 „  ƒ ZO e j j0 e j jN d5 „  ƒ ƒ ZP e j j0 d6 „  ƒ ZQ e j jN e j j! d7 „  ƒ ƒ ZR e j dE d8 „ ƒ ZS e j jT d9 „  ƒ ZU e j jT e j j! d: „  ƒ ƒ ZV e j dE d; „ ƒ ZW e j dE d< „ ƒ ZX e j j d= „  ƒ ZY e j j e j j! d> „  ƒ ƒ ZZ e j[ d? d@ ƒ e j dE dA „ ƒ ƒ Z\ dB „  Z] e j j! dC „  ƒ Z^ e j j e j dD „  ƒ ƒ Z_ RS(F   c         C   sF   t  j j j r; d d l m } t j d t d | j	 ƒ ƒ St  j
 Sd  S(   Niÿÿÿÿ(   t   poolt   optionst	   poolclass(   R   t   requirementst   independent_connectionsR"   t
   sqlalchemyR5   R   t   testing_enginet   dictt
   StaticPoolR(   (   R$   R5   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt
   setup_bindU   s
    	c         C   s<   |  j  | d  ƒ t j j j r8 |  j  | t j j ƒ n  d  S(   N(   t   define_reflected_tablest   NoneR   R    R!   R"   R   R#   (   R$   R%   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyR&   `   s    c         C   s˜  | r | d } n d } t  j j j r¶ t d | t d t j d t ƒt d t j	 d ƒ d t
 ƒt d	 t j d ƒ d t
 ƒt d
 t j t j d | d d ƒƒ d | d t ƒ} nf t d | t d t j d t ƒt d t j	 d ƒ d t
 ƒt d	 t j d ƒ d t
 ƒd | d t ƒ} t d | t d t j d t ƒt d t j t j d | ƒ ƒ t d t j d ƒ ƒ d | d t ƒt d | t d t j ƒ t d t j t j | j j ƒ ƒ t d t j d ƒ ƒ t j d d d ƒd | d t ƒt d | t d t j d t d d ƒt d t j d ƒ d d ƒt d  t j d ƒ d d! ƒd | d d" ƒt  j j j r†| d  k rÞt d# | t d t j d t ƒt d t j d ƒ ƒ t d$ t d% t  j j ƒ ƒ d t d t j j j ƒq†t d& | t d t j d t ƒt d' t d( t j j j ƒ ƒ t d t j d ƒ ƒ d | d t ƒt d) | t d t j d t ƒt d t j d ƒ ƒ d | d t ƒn  t  j j j rL|  j | | ƒ | sLt d* | t d+ t j d ƒ ƒ d t ƒ} t d, | t d t j d t ƒt d+ t j d ƒ ƒ d t ƒ} t d- | j j j ƒ  ƒ t d. | j j j ƒ  ƒ qLn  t  j j j rn|  j | | ƒ n  | r”t  j j  j r”|  j! | ƒ n  d  S(/   Nt   .t    t   userst   user_idR   t   test1i   t   nullablet   test2t   parent_user_ids   %susers.user_idt   namet
   user_id_fkR   t   test_needs_fkt
   dingalingst   dingaling_idt
   address_ids   %semail_addresses.address_idR   i   t   email_addressest   remote_user_idt   email_addressi   t   email_ad_pkt   comment_testR   t   comments
   id comments   data % commentt   d2s)   Comment types type speedily ' " \ '' Fun!s   the test % ' " \ table commentt   local_tablet	   remote_ids   %s.remote_table_2.idt   remote_tablet   local_ids   %s.local_table.idt   remote_table_2t   noncol_idx_test_nopkt   qt   noncol_idx_test_pkt   noncol_idx_nopkt   noncol_idx_pk("   R   R    t   self_referential_foreign_keysR"   R   R   t   sat   INTR   t   CHARt   Falset   FloatR   R   R   t   cRD   t   PrimaryKeyConstraintt   cross_schema_fk_reflectionR@   R   R#   R(   R*   t   default_schema_namet   index_reflectiont   define_indexR   R\   t   desct   view_column_reflectiont   define_viewst   temp_table_reflectiont   define_temp_tables(   R$   R%   R   t   schema_prefixRC   R[   R]   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyR?   f   sÚ    		
		c      
   C   sü   t  j d ƒ r) i d g d 6d d 6} n i d g d 6} t d | t d t j d	 t ƒt d
 t j d ƒ ƒ t d t j ƒ t j d
 d
 d ƒt j	 d d ƒ |  } t  j
 j j rø t  j
 j j rø t j | d t d ƒ ƒ t j | d t d ƒ ƒ n  d  S(   Nt   oracles   GLOBAL TEMPORARYt   prefixess   PRESERVE ROWSt   oracle_on_committ	   TEMPORARYt   user_tmpR   R   RI   i2   t   foot   user_tmp_uqt   user_tmp_ixt   after_creates:   create temporary view user_tmp_v as select * from user_tmpt   before_drops   drop view user_tmp_v(   R   t   againstR   R   Ra   Rb   R   t   VARCHARt   UniqueConstraintR   R    t   view_reflectionR"   t   temporary_viewsR	   t   listenR   (   R$   R%   t   kwRv   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyRp   ô   s,    
	
c         C   sE   t  d | j j | j j ƒ t  d | j j | j j | j j ƒ d  S(   Nt   users_t_idxt   users_all_idx(   R   Rf   RE   RG   RD   (   R$   R%   RC   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyRk     s    c         C   s„   x} d	 D]u } | } | r, d | | f } n  | d } d | | f } t  j | d t | ƒ ƒ t  j | d t d | ƒ ƒ q Wd  S(
   NRC   RO   s   %s.%st   _vs"   CREATE VIEW %s AS SELECT * FROM %sRz   R{   s   DROP VIEW %s(   RC   RO   (   R	   R   R   (   R$   R%   R   t
   table_namet   fullnamet	   view_namet   query(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyRn     s    

c         C   s2   t  t j ƒ } |  j t j j | j ƒ  k ƒ d  S(   N(   R   R   R(   t   assert_R   R#   t   get_schema_names(   R,   t   insp(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_schema_names.  s    c         C   sK   t  j ƒ  } t | j d ƒ s% t ‚ t | ƒ t | j d ƒ sG t ‚ d  S(   NRi   (   R   R;   t   hasattrR*   t   AssertionErrorR   (   R,   t   engine(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_dialect_initialize4  s    
c         C   s,   t  t j ƒ } t | j t j j j ƒ d  S(   N(   R   R   R(   R   Ri   R*   (   R,   RŒ   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_default_schema_name;  s    t   tablec         C   s5  d d d d d d g } |  j  } t | j ƒ } | d k rw | j | ƒ } | j ƒ  d d	 g } t t | ƒ | ƒ nº | r° g  | j | ƒ D] }	 |	 d
 r |	 d
 ^ q }
 n | j | ƒ }
 g  |
 D] } | | k rÆ | ^ qÆ } | d k rd d d g } t | | ƒ n" d d d g } t t | ƒ | ƒ d  S(   NRS   R]   R[   RV   RX   RZ   t   viewt   email_addresses_vt   users_vi    t   foreign_keyRC   RO   RL   (	   R%   R   t   bindt   get_view_namest   sortR   t   sortedt   get_sorted_table_and_fkc_namest   get_table_names(   R,   R   t
   table_typet   order_byt   _ignore_tablest   metaRŒ   t   table_namest   answert   rect   tablest   t(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   _test_get_table_names@  s0    		
%c         C   s5   t  |  j ƒ } | j ƒ  } t t | ƒ d g ƒ d  S(   NRv   (   R   R˜   t   get_temp_table_namesR   R›   (   R,   RŒ   t   temp_table_names(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_temp_table_namesg  s    c         C   s5   t  |  j ƒ } | j ƒ  } t t | ƒ d g ƒ d  S(   Nt
   user_tmp_v(   R   R˜   t   get_temp_view_namesR   R›   (   R,   RŒ   R©   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_temp_view_namesm  s    c         C   s   |  j  ƒ  d  S(   N(   R§   (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_table_namesu  s    c         C   s   |  j  d d ƒ d  S(   NRŸ   R—   (   R§   (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_table_names_fksy  s    c         C   s   |  j  ƒ  d  S(   N(   t   _test_get_comments(   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_comments~  s    c         C   s   |  j  t j j ƒ d  S(   N(   R°   R   R   R#   (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_comments_with_schema‚  s    c         C   sÑ   t  t j ƒ } t | j d d | ƒi d d 6ƒ t | j d d | ƒi d  d 6ƒ t g  | j d d | ƒD]" } i | d d 6| d d 6^ qn i d d 6d	 d 6i d
 d 6d d 6i d d 6d d 6g ƒ d  S(   NRS   R   s   the test % ' " \ table commentt   textRC   RI   RT   s
   id commentR   s   data % commentR   s)   Comment types type speedily ' " \ '' Fun!RU   (   R   R   R(   R   t   get_table_commentR@   t   get_columns(   R,   R   RŒ   R¤   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyR°   ‡  s    #8c         C   s   |  j  t j j ƒ d  S(   N(   R§   R   R   R#   (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt    test_get_table_names_with_schema¢  s    c         C   s   |  j  d d ƒ d  S(   NRž   R”   (   R§   (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_view_names§  s    c         C   s   |  j  t j j d d ƒd  S(   NRž   R”   (   R§   R   R   R#   (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_view_names_with_schema«  s    c         C   s   |  j  ƒ  |  j  d d ƒ d  S(   NRž   R”   (   R§   (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_tables_and_views²  s    
c         C   s  t  t j ƒ } |  j j |  j j } } d d g } | d k rO d d g } n  t | j ƒ } x®t | | | f ƒ D]—\ } }	 | }
 | j	 | d |
 ƒ} |  j
 t | ƒ d k t | ƒ ƒ xKt |	 j ƒ D]:\ } } t | j | | d ƒ | | d	 j } | j } t | t j j ƒ r,| j } n  t j d
 ƒ r_| t j t j f k r_t j } n  |  j
 t t | j ƒ j | j ƒ j t j t j t j t j t j t j  t j! g ƒ ƒ d k d | j | j | | d | f ƒ | j" sÍ | | d d  k st$ ‚ qÍ qÍ Wqt Wd  S(   NRC   RO   R”   R–   R•   R   i    RI   t   typeRr   s   %s(%s), %s(%s)t   default(%   R   R   R(   R¥   RC   RO   R   R˜   t   zipRµ   RŠ   t   lent	   enumeratet   columnsR   RI   t	   __class__Rº   t
   isinstanceRa   R   t
   TypeEngineR|   t	   sql_typest   Datet   DateTimet   sett   __mro__t   intersectionR   t   Numerict   TimeR   t   _BinaryR   R@   R   (   R,   R   Rž   R¡   RC   t	   addressesR¢   RŒ   R†   R“   t   schema_namet   colst   it   colt   ctypet	   ctype_def(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   _test_get_columns¸  sH    ""	"	c         C   s   |  j  ƒ  d  S(   N(   RÓ   (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_columnsð  s    c         G   s{   t  d |  j g  t | ƒ D] \ } } t d | | ƒ ^ q Œ } | j ƒ  g  t |  j j ƒ j d ƒ D] } | d ^ qg S(   NR¦   s   t%dRº   (   R   R%   R¾   R   t   createR   R˜   Rµ   (   R,   R   RÏ   t   type_R¦   Rf   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   _type_round_tripô  s    5
c         C   sb   x[ |  j  t j d d ƒ ƒ D]> } t | t j ƒ s: t ‚ t | j d ƒ t | j d ƒ q Wd  S(   Ni   i   (   R×   RÃ   RÉ   RÁ   R   R   t	   precisiont   scale(   R,   t   typ(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_numeric_reflection  s    "c         C   sH   |  j  t j d ƒ ƒ d } t | t j ƒ s4 t ‚ t | j d ƒ d  S(   Ni4   i    (   R×   RÃ   R   RÁ   R   R   t   length(   R,   RÚ   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_varchar_reflection  s    c      	   C   s„   t  d |  j t d t d t ƒt d t d t ƒƒ } | j ƒ  t t d „  t	 |  j j
 ƒ j d ƒ Dƒ ƒ i t d 6t d 6ƒ d  S(   NR¦   t   aRF   t   bc         s   s#   |  ] } | d  | d f Vq d S(   RI   RF   N(    (   t   .0RÐ   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pys	   <genexpr>  s   (   R   R%   R   R   R   Rd   RÕ   R   R<   R   R˜   Rµ   (   R,   R¦   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_nullable_reflection  s    
c         C   s   |  j  d t j j ƒ d  S(   NR   (   RÓ   R   R   R#   (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_columns_with_schema   s    c         C   s—   t  |  j ƒ } |  j j } t | j ƒ } | j d ƒ } |  j t | ƒ d k t | ƒ ƒ x5 t | j	 ƒ D]$ \ } } t
 | j | | d ƒ qk Wd  S(   NRv   i    RI   (   R   R˜   R¥   Rv   R   Rµ   RŠ   R½   R¾   R¿   R   RI   (   R,   R¡   Rv   RŒ   RÎ   RÏ   RÐ   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_temp_table_columns%  s    "c         C   sO   t  |  j ƒ } | j d ƒ } t g  | D] } | d ^ q( d d d g ƒ d  S(   NR«   RI   R   Rw   (   R   R˜   Rµ   R   (   R,   RŒ   RÎ   RÐ   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_temp_view_columns0  s    c         C   s   |  j  d d ƒ d  S(   NRž   R”   (   RÓ   (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_view_columns8  s    c         C   s    |  j  d t j j d d ƒ d  S(   NR   Rž   R”   (   RÓ   R   R   R#   (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt!   test_get_view_columns_with_schema<  s    	c   
      C   sÃ   |  j  } |  j j |  j j } } t | j ƒ } | j | j d | ƒ} | d } t | d g ƒ | j | j d | ƒ} | d }	 t |	 d g ƒ t	 j
 j j ƒ   t | d d ƒ Wd  QXd  S(   NR   t   constrained_columnsRD   RN   RI   RR   (   R%   R¥   RC   RO   R   R˜   t   get_pk_constraintRI   R   R   R    t   reflects_pk_namest   fail_if(
   R,   R   R¡   RC   RÌ   RŒ   t
   users_const   users_pkeyst	   addr_const
   addr_pkeys(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   _test_get_pk_constraintC  s    	

c         C   s   |  j  ƒ  d  S(   N(   Rï   (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_pk_constraintT  s    c         C   s   |  j  d t j j ƒ d  S(   NR   (   Rï   R   R   R#   (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt"   test_get_pk_constraint_with_schemaX  s    c         C   sD   |  j  } |  j j } t | j ƒ } t t j d | j | j	 ƒ d  S(   Ns+   .*get_primary_keys\(\) method is deprecated(
   R%   R¥   RC   R   R˜   R    t   sa_exct   SADeprecationWarningt   get_primary_keysRI   (   R,   R¡   RC   RŒ   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt    test_deprecated_get_primary_keys^  s    	c   
      C   s—  |  j  } |  j j |  j j } } t | j ƒ } | } t j j j	 rô | j
 | j d | ƒ} | d } t j j j ƒ   t | d d ƒ Wd  QXt | d | ƒ t | d | j ƒ t | d d g ƒ t j j j	 rô t | d	 d
 g ƒ qô n  | j
 | j d | ƒ}	 |	 d } t j j j ƒ   |  j | d d  k	 ƒ Wd  QXt | d | ƒ t | d | j ƒ t | d d g ƒ t | d	 d g ƒ d  S(   NR   i    RI   RJ   t   referred_schemat   referred_tablet   referred_columnsRD   Rç   RH   RP   (   R%   R¥   RC   RO   R   R˜   R   R    R`   R"   t   get_foreign_keysRI   t   named_constraintsRê   R   t   implicitly_named_constraintsRŠ   R@   (
   R,   R   R¡   RC   RÌ   RŒ   t   expected_schemat   users_fkeyst   fkey1t
   addr_fkeys(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   _test_get_foreign_keysk  s,    	

c         C   s   |  j  ƒ  d  S(   N(   R   (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_foreign_keysŒ  s    c         C   s   |  j  d t j j ƒ d  S(   NR   (   R   R   R   R#   (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt!   test_get_foreign_keys_with_schema  s    c   	      C   sp  |  j  d t j j j d t j j d t j j ƒ \ } } } t t j ƒ } | j | j	 ƒ } t
 t | ƒ d ƒ | d } t
 | d t j j ƒ t
 | d | j	 ƒ t
 | d d	 g ƒ t
 | d
 d g ƒ | j | j	 d t j j ƒ} t
 t | ƒ d ƒ | d } | d d  t j j j f k s0t ‚ t
 | d | j	 ƒ t
 | d d	 g ƒ t
 | d
 d g ƒ d  S(   Ns   %s.local_tables   %s.remote_tables   %s.remote_table_2i   i    Rö   R÷   Rø   R   Rç   RW   R   RY   (   R¥   R   R(   R*   Ri   R   R#   R   Rù   RI   R   R½   R@   R   (	   R,   RV   RX   RZ   RŒ   t   local_fkeysRþ   t   remote_fkeyst   fkey2(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt"   test_get_inter_schema_foreign_keys•  s,    

c         C   s   |  j  d d ƒ d  S(   Nt   ondeletet   CASCADE(   t   _test_get_foreign_key_options(   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt%   test_get_foreign_key_options_ondelete¸  s    c         C   s   |  j  d d ƒ d  S(   Nt   onupdates   SET NULL(   R	  (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt%   test_get_foreign_key_options_onupdate¼  s    c            s{  |  j  } t d | t d t d t ƒd t ƒt d | t d t d t ƒt d t t j d d d	 ƒƒ t d
 t d ƒ ƒ d t ƒt d | t d t d t ƒt d t d ƒ d t ƒt d t ƒ t j	 d g d g d d | d t ƒ| j
 ƒ  t | j ƒ } | j d ƒ d d ‰  t t ‡  f d †  ˆ  Dƒ ƒ i  ƒ | j d ƒ d d ‰  t t ‡  f d †  ˆ  Dƒ ƒ | ƒ d  S(   Nt   xR   R   RK   R“   t   x_ids   x.idRI   t   xidt   testi
   t   useri2   RF   t   tids   table.idt   myfki    R6   c         3   s)   |  ] } ˆ  | r | ˆ  | f Vq d  S(   N(    (   Rà   t   k(   t   opts(    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pys	   <genexpr>è  s    c         3   s)   |  ] } ˆ  | r | ˆ  | f Vq d  S(   N(    (   Rà   R  (   R  (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pys	   <genexpr>ë  s    (   R%   R   R   R   R   Ra   R   R   Rd   t   ForeignKeyConstraintt
   create_allR   R˜   Rù   R   R<   (   R,   R6   R¡   RŒ   (    (   R  sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyR	  À  s8    	
#c         C   s…   g  | D] } | d ^ q } xa | D]Y } | d | k s@ t  ‚ | | j | d ƒ } x# | D] } t | | | | ƒ q^ Wq$ Wd  S(   NRI   (   R   t   indexR   (   R,   t   indexest   expected_indexest   dt   index_namest   e_indexR  t   key(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   _assert_insp_indexesí  s    c         C   s†   |  j  } t | j ƒ } | j d d | ƒ} i t d 6d d g d 6d d 6i t d 6d	 d d g d 6d
 d 6g } |  j | | ƒ d  S(   NRC   R   t   uniqueRE   RG   t   column_namesRƒ   RI   RD   R„   (   R%   R   R˜   t   get_indexesRd   R  (   R,   R   R¡   RŒ   R  R  (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   _test_get_indexesõ  s    	c         C   s   |  j  ƒ  d  S(   N(   R#  (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_indexes  s    c         C   s   |  j  d t j j ƒ d  S(   NR   (   R#  R   R   R#   (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_indexes_with_schema  s    c         C   sº   |  j  } t | j ƒ } | j | ƒ } i t d 6| d 6g } |  j | | ƒ t | | d | j ƒ} t t | j	 ƒ d ƒ t
 t | j	 ƒ d j | ƒ t t | j	 ƒ d j | ƒ d  S(   NR   RI   t   autoload_withi   i    (   R%   R   R˜   R"  Rd   R  R   R   R½   R  R   t   listR“   RI   (   R,   t   tnamet   ixnameR¡   RŒ   R  R  R¦   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   _test_get_noncol_index  s    	c         C   s   |  j  d d ƒ d  S(   NR[   R^   (   R*  (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_noncol_index_no_pk%  s    c         C   s   |  j  d d ƒ d  S(   NR]   R_   (   R*  (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_noncol_index_pk)  s    c      	   C   sÓ   t  d |  j t d t d ƒ ƒ t d t d ƒ ƒ ƒ t j |  j d t d ƒ ƒ t j |  j d t d ƒ ƒ |  j j ƒ  t |  j j	 ƒ } t
 d ƒ 6 t | j d ƒ i d	 d
 6d g d 6d d 6g ƒ Wd  QXd  S(   NR¦   R  i   t   yRz   s+   CREATE INDEX t_idx ON t(lower(x), lower(y))s   CREATE INDEX t_idx_2 ON t(x)s>   Skipped unsupported reflection of expression-based index t_idxt   t_idx_2RI   R!  i    R   (   R   R%   R   R   R	   R   R   R  R   R˜   R   R   R"  (   R,   RŒ   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt%   test_reflect_expression_based_indexes-  s$    
c         C   s   |  j  ƒ  d  S(   N(   t   _test_get_unique_constraints(   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_unique_constraintsJ  s    c         C   sd   t  |  j ƒ } | j d ƒ } x | D] } | j d d  ƒ q% Wt | i d g d 6d d 6g ƒ d  S(   NRv   t   duplicates_indexRI   R!  Rx   (   R   R˜   t   get_unique_constraintst   popR@   R   (   R,   RŒ   t	   reflectedt   refl(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt&   test_get_temp_table_unique_constraintsN  s
    c         C   sŽ   t  |  j ƒ } | j d ƒ } x | D] } | j d d  ƒ q% Wt g  | D] } | d d k rI | ^ qI i t d 6d g d 6d d 6g ƒ d  S(   NRv   t   dialect_optionsRI   Ry   R   Rw   R!  (   R   R˜   R"  R4  R@   R   Rd   (   R,   RŒ   R  t   indt   idx(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_temp_table_indexesY  s    &
c         C   s   |  j  d t j j ƒ d  S(   NR   (   R0  R   R   R#   (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt'   test_get_unique_constraints_with_schemal  s    c         C   sÈ  t  i d d 6d g d 6i d d 6d d d g d 6i d d 6d d d g d 6i d	 d 6d
 d g d 6i d d 6d g d 6i d d 6d g d 6g d t j d ƒ ƒ} |  j } 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 | ƒ} x2 | D]* } | j	 t j
 d | d | d Œ ƒ q*W| j ƒ  t | j ƒ } t  | j d d | ƒd t j d ƒ ƒ} t ƒ  } xR t | | ƒ D]A \ }	 }
 |
 j d d  ƒ } | rè| j | ƒ n  t |	 |
 ƒ q´Wt ƒ  } t d | d | j d | ƒ} t g  | j D] } | j ^ q-ƒ } t g  | j D]! } t | t j
 ƒ rR| j ^ qRƒ j d g ƒ } | j | ƒ sžt ‚ | rÄt | | ƒ t | t ƒ  ƒ n  d  S(   Nt   unique_aRI   RÞ   R!  t   unique_a_b_cRß   Rf   t   unique_c_a_bt   unique_asc_keyt   ascR  s   i.have.dotss   i have spacest   testtbli   i   R   R2  R&  (   R›   t   operatort
   itemgetterR%   R   R   Ra   R   R   t   append_constraintR~   R  R   R˜   R3  RÆ   R¼   R4  R@   t   addR   R   R  RI   t   constraintsRÁ   t
   differenceRÈ   R   (   R,   R   t   uniquest	   orig_metaR“   t   uct	   inspectorR5  t   names_that_duplicate_indext   origR6  t   dupet   reflected_metadataR:  t	   idx_namest   uqt   uq_names(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyR0  q  s`    		"
				%$c         C   s   |  j  ƒ  d  S(   N(   t   _test_get_check_constraints(   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_check_constraintsÀ  s    c         C   s   |  j  d t j j ƒ d  S(   NR   (   RT  R   R   R#   (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt!   test_get_check_constraints_schemaÄ  s    c      	   C   s  |  j  } t d | t d t ƒ  ƒ t j d d d ƒt j d d d ƒd | ƒ| j ƒ  t | j ƒ } t	 | j
 d d | ƒd	 t j d ƒ ƒ} d
 „  } g  | D]( } i | d d 6| | d ƒ d 6^ q¢ } t | i d d 6d d 6i d d 6d d 6g ƒ d  S(   Nt   sa_ccRÞ   s   a > 1 AND a < 5RI   t   cc1s   a = 1 OR (a > 2 AND a < 5)t   cc2R   R  c         S   s%   d j  t j d |  j ƒ  t j ƒ ƒ S(   Nt    s   and|\d|=|a|or|<|>(   t   joint   ret   findallt   lowert   I(   t   sqltext(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt	   normalizeà  s    R`  s   a > 1 and a < 5s   a = 1 or a > 2 and a < 5(   R%   R   R   R   Ra   t   CheckConstraintR  R   R˜   R›   t   get_check_constraintsRC  RD  R   (   R,   R   RJ  RL  R5  Ra  t   item(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyRT  É  s(    	
	2c         C   sl   |  j  } d } d } t | j ƒ } | j | d | ƒ} |  j | ƒ | j | d | ƒ} |  j | ƒ d  S(   NR–   R•   R   (   R%   R   R˜   t   get_view_definitionRŠ   (   R,   R   R¡   t
   view_name1t
   view_name2RŒ   t   v1t   v2(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   _test_get_view_definitionñ  s    	c         C   s   |  j  ƒ  d  S(   N(   Rj  (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_view_definitionü  s    c         C   s   |  j  d t j j ƒ d  S(   NR   (   Rj  R   R   R#   (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt$   test_get_view_definition_with_schema   s    t
   postgresqls   PG specific featurec         C   sD   |  j  } t | j ƒ } | j | | ƒ } |  j t | t ƒ ƒ d  S(   N(   R%   R   R˜   t   get_table_oidRŠ   RÁ   t   int(   R,   R†   R   R¡   RŒ   t   oid(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   _test_get_table_oid  s    	c         C   s   |  j  d ƒ d  S(   NRC   (   Rq  (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_table_oid  s    c         C   s   |  j  d d t j j ƒd  S(   NRC   R   (   Rq  R   R   R#   (   R,   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_get_table_oid_with_schema  s    c         C   sw   |  j  } t | j ƒ } xX d
 d d g D]G \ } } | j | ƒ } d „  | Dƒ | } | j d t ƒ s( t ‚ q( Wd	 S(   sˆ  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.

        RC   RD   RO   RN   RL   RM   c         S   s   i  |  ] } | | d  “ q S(   RI   (    (   Rà   Rf   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pys
   <dictcomp>,  s   	 t   autoincrementN(   RC   RD   (   RO   RN   (   RL   RM   (   R%   R   R˜   Rµ   t   getR   R   (   R,   R¡   RŒ   R(  t   cnameRÎ   t   id_(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   test_autoincrement_col  s    	N(`   R0   R1   R@   t   run_insertst   run_deletesR   R2   R3   R>   R&   R?   Rp   Rk   Rn   R   R    t   schema_reflectionR   R‘   R’   t   provide_metadataR§   R©   Rª   R   R€   R­   t   table_reflectionR®   t!   foreign_key_constraint_reflectionR¯   t   comment_reflectionR±   R!   R²   R°   R¶   Rm   R·   R¸   R¹   RÓ   RÔ   R×   RÛ   RÝ   Rá   Râ   Ro   Rã   Rä   Rå   Ræ   Rï   t!   primary_key_constraint_reflectionRð   Rñ   Rõ   R   R  R  Rh   R  t1   foreign_key_constraint_option_reflection_ondeleteR
  t1   foreign_key_constraint_option_reflection_onupdateR  R	  R  R#  Rj   R$  R%  R*  R+  R,  t   indexes_with_expressionsR/  t   unique_constraint_reflectionR1  R7  R;  R<  R0  t   check_constraint_reflectionRU  RV  RT  Rj  Rk  Rl  t   only_onRq  Rr  Rs  Rx  (    (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyR4   P   sÊ   
Ž$%							8								 		"-				
	N	'
			t   NormalizedNameTestc           B   s5   e  Z d Z e Z e d „  ƒ Z d „  Z d „  Z RS(   t   denormalized_namesc         C   sl   t  t d d t ƒ| t d t d t ƒƒ t  t d d t ƒ| t d t d t ƒt d t d ƒ ƒ ƒ d  S(   Nt   t1t   quoteR   R   t   t2t   t1ids   t1.id(   R   R   R   R   R   R   (   R$   R%   (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyR&   4  s    c         C   s³   t  t j ƒ } t t d d t ƒ| d t ƒ} | j d } | j j j	 | j j
 ƒ s^ t ‚ t  t j ƒ } | j d d „  ƒ | j d j j j	 | j d j j
 ƒ s¯ t ‚ d  S(   NR‹  RŠ  t   autoloadR‰  t   onlyc         S   s   |  j  ƒ  d k S(   NR‰  R‹  (   R‰  R‹  (   R^  (   RI   t   m(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   <lambda>J  RB   (   R   R   R(   R   R   R   R¥   Rf   RŒ  t
   referencesR   R   t   reflect(   R,   t   m2t   t2_reft   t1_reft   m3(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt$   test_reflect_lowercase_forced_tablesB  s    !!c         C   s€   g  t  t j ƒ j ƒ  D] } | j ƒ  d k r | ^ q } t | d j ƒ  | d j ƒ  ƒ t | d j ƒ  | d j ƒ  ƒ d  S(   NR‰  R‹  i    i   (   R‰  R‹  (   R   R   R(   R   R^  R   t   upper(   R,   R¦   t
   tablenames(    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyR®   M  s
    !(   Rˆ  (	   R0   R1   t   __requires__R   R2   R3   R&   R—  R®   (    (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyR‡  0  s
   	(*   RC  R\  R:   Ra   RB   R    R   R   R   R   R   R   R   R   R   R	   R
   Rò   R   R   R   R   R   R   R   RÃ   t   engine.reflectionR   R   R   t   sql.elementsR   R   R   R@   R%   RC   t
   TablesTestR   R4   R‡  t   __all__(    (    (    sG   lib/python2.7/site-packages/sqlalchemy/testing/suite/test_reflection.pyt   <module>   sD   .ÿ ÿ ÿ ã(