
    j:                    >   d dl mZ d dlZd dlZd dlZd dlZddlmZ ddl	m
Z
 ddl	mZ ddl	mZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddl	mZ ddl	mZ ddlmZ ddlmZ ddlmZ  G d de      Z G d d      Z G d d      Z G d de      Z G d d      Z	 ddZy)    )annotationsN   )TestBase   )config)mock)	provision)eq_)ne_)adict)drop_all_tables_from_metadata   )event)util)sort_tables_and_constraints)visitors)ClauseElementc                     e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZ ej                  dd      ej                   d               Z ej                  dd      d	        Zed
        Zed        Zed        Zed        Zd Zd Zd Zed        Zed        Zed        Zed        Zed        Z ed        Z!d Z"d Z#ed        Z$y)
TablesTestonceeachNTclassautousescopec              #     K   | j                          | j                          | j                          d  | j                          y wN)_init_class_setup_once_tables_setup_once_inserts_teardown_once_metadata_bindclss    F/tmp/pip-target-jj7clzyk/lib/python/sqlalchemy/testing/fixtures/sql.py_setup_tables_test_classz#TablesTest._setup_tables_test_class7   s9      	 !((*s   AAfunctionc              #  t   K   | j                          | j                          d  | j                          y wr   )_setup_each_tables_setup_each_inserts_teardown_each_tablesselfs    r$   _setup_tables_test_instancez&TablesTest._setup_tables_test_instanceD   s-     !  """$s   68c                    | j                   S r   )_tables_metadatar+   s    r$   tables_test_metadatazTablesTest.tables_test_metadataM   s    $$$    c                $   | j                   dk(  r&| j                  dk(  rd| _        | j                  dv sJ t               | _        t               | _        t               | _        | j                         | _        t        j                         | _        y )Nr   r   )r   N)run_define_tablesrun_create_tablesrun_insertsr   othertables	sequences
setup_bindbindsaMetaDatar/   r"   s    r$   r   zTablesTest._init_classQ   so      F*$$.(.%??n444G	W
>>#!{{}r1   c                    | j                   dk(  rE| j                          | j                  j                         5 }| j	                  |       d d d        y y # 1 sw Y   y xY wNr   r5   _load_fixturesr:   begininsert_data)r#   conns     r$   r    zTablesTest._setup_once_inserts_   sU    ??f$ ! &T%& & %& &   AAc                ~   | j                   dk(  r| j                  | j                         | j                  dk(  r%| j                  j	                  | j
                         | j                  j                  | j                  j                         | j                  j                  | j                  j                         y y r>   
r3   define_tablesr/   r4   
create_allr:   r7   updater8   
_sequencesr"   s    r$   r   zTablesTest._setup_once_tablesf   s      F*c223$$.$$//9JJc2299:MM  !5!5!@!@A +r1   c                   | j                   dk(  r| j                  | j                         | j                  dk(  r%| j                  j	                  | j
                         | j                  j                  | j                  j                         | j                  j                  | j                  j                         y | j                  dk(  r&| j                  j	                  | j
                         y y Nr   rF   r+   s    r$   r(   zTablesTest._setup_each_tableso   s    !!V+t445%%/%%00;KKt44;;<NN!!$"7"7"B"BC##v-!!,,TYY7 .r1   c                    | j                   dk(  rE| j                          | j                  j                         5 }| j	                  |       d d d        y y # 1 sw Y   y xY wrL   r?   r,   rC   s     r$   r)   zTablesTest._setup_each_insertsy   sY    v%!" 'd  &' ' &' 'rD   c                P   | j                   dk(  rd| j                  j                          | j                  dk(  r t	        | j
                  | j                         | j
                  j                          n/| j                  dk(  r t	        | j
                  | j                         | j                   dk7  ri| j                  dk(  rY| j                  dk(  rI| j                  j                         5 }t        j                  |t        | j
                         d d d        y y y y # 1 sw Y   y xY w)Nr   r   )r3   r7   clearr4   r   r/   r:   run_deletesrA   r	   delete_from_all_tablesr   rN   s     r$   r*   z TablesTest._teardown_each_tables   s    !!V+KK%%/-d.C.CTYYO!!'')##v-)$*?*?K ""f,&&&0  F*" d00&$"7"7  + 1 - s   *&DD%c                    | j                   r t        | j                  | j                         | j                  dk(  r| j                  | j                         d | j                  _        | j                  d | _        y y r>   )r4   r   r/   r:   run_dispose_binddispose_bindrun_setup_bindr"   s    r$   r!   z'TablesTest._teardown_once_metadata_bind   se      )#*>*>I6)SXX&$(!)CH *r1   c                "    t         j                  S r   )r   dbr"   s    r$   r9   zTablesTest.setup_bind   s    yyr1   c                x    t        |d      r|j                          y t        |d      r|j                          y y )Ndisposeclose)hasattrrZ   r[   )r#   r:   s     r$   rU   zTablesTest.dispose_bind   s-    4#LLNT7#JJL $r1   c                     y r    )r#   metadatas     r$   rG   zTablesTest.define_tables       r1   c                    i S r   r^   r"   s    r$   fixtureszTablesTest.fixtures   s    	r1   c                     y r   r^   )r#   
connections     r$   rB   zTablesTest.insert_data   r`   r1   c                >    | j                  | j                  ||       y r   )assert_sql_countr:   )r,   countfns      r$   
sql_count_zTablesTest.sql_count_   s    diiU3r1   c                >    | j                  | j                  ||       y r   )
assert_sqlr:   )r,   	callable_
statementss      r$   sql_eq_zTablesTest.sql_eq_   s    		9j9r1   c                D   i i }}| j                         j                         D ]C  \  }}t        |      dk  rt        |t              r| j
                  |   }|d   ||<   |dd ||<   E t        | j                  j
                  j                               D ]w  \  }}|	||vr| j                  j                         5 }|j                  |j                         ||   D cg c]  }t        t        ||   |             c}       ddd       y yc c}w # 1 sw Y   xY w)z4Insert rows as represented by the fixtures() method.r   r   r   N)rb   itemslen
isinstancestrr7   r   r/   valuesr:   rA   executeinsertdictzip)r#   headersrowstabledatafksrC   column_valuess           r$   r@   zTablesTest._load_fixtures   s(    B<<>//1 	#KE44y1}%%

5)!!WGENqr(DK	# 6  ''..0
 	JE3 }G#! TLLN .2%[) S?@ 	 s   >"D D?DDD	)%__name__
__module____qualname__rV   r3   r4   r5   rQ   rT   r:   r/   r7   r6   r8   r   fixturefixture_classmethodr%   r-   propertyr0   classmethodr   r    r   r(   r)   r*   r!   r9   rU   rG   rb   rB   ri   rn   r@   r^   r1   r$   r   r      s   N   K K DFEIV^^D0	+   1	+ V^^D
3% 4% % % - - & & B B8'( 
 
          4:  r1   r   c                  @    e Zd Z ej                  dd      d        Zy)NoCacheTr&   r   c              #     K   t         j                  j                  }d t         j                  _        d  |t         j                  _        y wr   )r   rX   _compiled_cache)r,   _caches     r$   _disable_cachezNoCache._disable_cache   s0     **$(		!$*		!s   A
AN)r   r   r   r   r   r   r^   r1   r$   r   r      s!    V^^D
3+ 4+r1   r   c                  j    e Zd Zej                  d        Zd Z ej                  dd      d        Z	y)RemovesEventsc                    t               S r   )setr+   s    r$   
_event_fnszRemovesEvents._event_fns   s	    ur1   c                p    | j                   j                  |||f       t        j                  |||fi | y r   )r   addr   listen)r,   targetnamerh   kws        r$   event_listenzRemovesEvents.event_listen   s0    VT2./VT2,,r1   Tr&   r   c              #  Z   K   d  | j                   D ]  }t        j                  |   y wr   )r   r   remove)r,   keys     r$   _remove_eventszRemovesEvents._remove_events   s(     ?? 	CLL#	s   )+N)
r   r   r   r   memoized_propertyr   r   r   r   r   r^   r1   r$   r   r      s@    	 - V^^D
3 4r1   r   c                  V    e Zd ZdxZZdZdZ ej                  d      Z	d Z
ed        Zy)ComputedReflectionFixtureTestNT)computed_columnstable_reflectionz[\[\]\(\)\s`'\"]*c                V    | j                   j                  d|      j                         S )N )regexpsublower)r,   texts     r$   	normalizez'ComputedReflectionFixtureTest.normalize   s     {{r4(..00r1   c                   ddl m} ddl m} ddlm} ddlm} ddlm}  |d| |d|d	
       |d|       |d| |d             |d|d              |d| |d|d	
       |d|       |d| |d                  }|j                  j                  j                  r: |d| |d|d	
       |d|       |d| |d            t        j                        }|j                  j                  j                  rb|j                   |d| |dd                   |j                  j                  j                  r!j                   |d| |dd                   |j                  j                  j                  rd|j                   |d| |dd	                   |j                  j                  j                  r"j                   |d| |dd	                   y y y )Nr   )Integer)testing)Column)Computed)Tablecomputed_default_tableidT)primary_keynormalcomputed_colznormal + 42with_default42)server_defaultcomputed_column_tablecomputed_no_flagznormal / 42)schemacomputed_virtualz
normal + 2F)	persistedz
normal / 2computed_storedznormal - 42znormal * 42)r   r   r   r   r   r   r   requiresschemasenabledr   test_schemacomputed_columns_virtualappend_columncomputed_columns_stored)	r#   r_   r   r   r   r   r   tt2s	            r$   rG   z+ComputedReflectionFixtureTest.define_tables   s   $&#$4d38W%>7H],CD>74@	
 #4d38W%%w0GH
 ##++'tW$7x))7H]4KL))B 44<<OO&\U; ''//  * ? 33;;OO%]d; ''//  ) $? 0 <r1   )r   r   r   r5   rQ   __backend____requires__recompiler   r   r   rG   r^   r1   r$   r   r      sB     $$K+K;LRZZ,-F1 A Ar1   r   c                      e Zd Zd Zd Zd Zy)CacheKeyFixturec                   |j                         }|j                         }|%|j                  j                  d      sJ |J ||fS t        |j                  |j                         t        t        |j                        t        |j                               t        |j                  |j                        D ]  \  }}|j                  ||      rJ  ||fS )Nnocachecompare_values)	_generate_cache_key_annotationsgetr
   r   hashrx   
bindparamscompare)r,   abr   a_keyb_keya_paramb_params           r$   _compare_equalzCacheKeyFixture._compare_equalC  s    %%'%%'=>>%%i000= = e| 		599%UYYeii1$'(8(8%:J:J$K O w~NNNOe|r1   c           	     2    |       } |       }t        j                  t        t        |            d      D ]]  \  }}||k(  r | j	                  ||   ||   |      \  }}|,||   j                         }||   j                         }||E| ||   j                  j                  d      sJ | ||   j                  j                  d      sJ |j                  |j                  k(  r^t        |j                  |j                        D ]  \  }	}
|	j                  |
|      r nB t        |j                  |j                         n t        |j                  |j                         t        ||   t              sGt        ||   t              s\g }g }t        j                   ||         D ]#  }|j"                  dk(  s|j%                  |       % t        j                   ||         D ]#  }|j"                  dk(  s|j%                  |       % t'        t)        |j                  d       t)        t+        j,                  |      d              t'        t)        |j                  d       t)        t+        j,                  |      d	              ` y )
Nr   r   r   	bindparamc                    | j                   S r   r   r   s    r$   <lambda>z8CacheKeyFixture._run_cache_key_fixture.<locals>.<lambda>  
    155 r1   r   c                    | j                   S r   r   r   s    r$   r   z8CacheKeyFixture._run_cache_key_fixture.<locals>.<lambda>  
     r1   c                    | j                   S r   r   r   s    r$   r   z8CacheKeyFixture._run_cache_key_fixture.<locals>.<lambda>  r   r1   c                    | j                   S r   r   r   s    r$   r   z8CacheKeyFixture._run_cache_key_fixture.<locals>.<lambda>  r   r1   )	itertoolscombinations_with_replacementrangerq   r   r   r   r   r   rx   r   r   r   rr   r   r   iterate__visit_name__appendr
   sortedr   unique_list)r,   r   r   case_acase_br   r   r   r   r   r   assert_a_paramsassert_b_paramselems                 r$   _run_cache_key_fixturez&CacheKeyFixture._run_cache_key_fixtureS  sn   ;;#f+
 E	DAq Av#221Ivay. u =q	557q	557=EM}%ay5599)DDD}%ay5599)DDD99		),/((%*:*:- 2(  '#N  /   "2 EIIuyy1		599-
 &)]3
q	=9 #%"$$,,VAY7 5D**k9'..t45 %,,VAY7 5D**k9'..t45 5++A((9 5++A((9AE	r1   c                     |       } |       }t        j                  t        t        |            d      D ]  \  }}| j	                  ||   ||   |         y )Nr   )r   r   r   rq   r   )r,   r   r   r   r   r   r   s          r$   _run_cache_key_equal_fixturez,CacheKeyFixture._run_cache_key_equal_fixture  sZ    ;;#f+
 	FDAq q	6!9nE	Fr1   N)r   r   r   r   r   r   r^   r1   r$   r   r   B  s     IVFr1   r   c                    | j                   }|j                  | j                   G d d      fdfd}|| _        y )Nc                  ,    e Zd ZdZd Zed        Zd Zy).insertmanyvalues_fixture.<locals>.RandomCursorcursorc                    || _         y r   r   )r,   r   s     r$   __init__z7insertmanyvalues_fixture.<locals>.RandomCursor.__init__  s	     DKr1   c                .    | j                   j                  S r   )r   descriptionr+   s    r$   r   z:insertmanyvalues_fixture.<locals>.RandomCursor.description  s    ;;***r1   c                z    | j                   j                         }t        |      }t        j                  |       |S r   )r   fetchalllistrandomshuffle)r,   rz   s     r$   r  z7insertmanyvalues_fixture.<locals>.RandomCursor.fetchall  s.    ;;'')D:DNN4 Kr1   N)r   r   r   	__slots__r   r   r   r  r^   r1   r$   RandomCursorr     s%    		! 
	+ 
	+	r1   r  c              3     K   	r |      } | |||||      D ])  }
r!|j                   rt        j                  d       | + y w)Nz)Batches were downgraded for sorted INSERT)is_downgradedr   warn)rd   r   	statement
parametersgeneric_setinputsizescontextbatchr  orig_dialectrandomize_rowswarn_on_downgradeds          r$   !_deliver_insertmanyvalues_batcheszCinsertmanyvalues_fixture.<locals>._deliver_insertmanyvalues_batches  s[      !&)F!!
 	E "e&9&9		EFK	s   AAc                    t         j                  j                  | d      5   | |      cd d d        S # 1 sw Y   y xY w)Nr  )new)r   patchobject)dialectr  r  	orig_conns     r$   _exec_insertmany_contextz:insertmanyvalues_fixture.<locals>._exec_insertmany_context  sD    ZZ/1  
 	/
 Wg.	/ 	/ 	/s	   	7A )r  r  r  )	rd   r  r  r  r  r  r  r  r  s	    ``  @@@@r$   insertmanyvalues_fixturer    sE       G<<L33I (./ +CJ'r1   )FF) 
__future__r   r   r  r   
sqlalchemyr;   baser   r   r   r   r	   
assertionsr
   r   r   r   r   r   r   r   sqlr   sql.elementsr   r   r   r   r   r   r  r^   r1   r$   <module>r!     s    #   	         0   1  )x xv+ +  MJ M`cF cFN :?:Cr1   