U
    x^S                     @   s  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 G dd dejZG dd dejZG dd dejZG dd dejZG d d! d!ejZG d"d# d#ejZG d$d% d%ejZ d&S )'   )config)fixtures)eq_)in_)Column)Table   )	bindparam)case)Computed)false)func)Integer)literal_column)null)select)String)testing)text)true)tuple_)union)utilc                   @   s@   e Zd ZdZedd Zedd Zdd Zej	j
dd	 Zd
S )CollateTestTc                 C   s&   t d|tdtddtdtd d S )N
some_tableidTZprimary_keydatad   r   r   r   r   clsmetadata r#   L/tmp/pip-install-dq5v43_d/SQLAlchemy/sqlalchemy/testing/suite/test_select.pydefine_tables   s    zCollateTest.define_tablesc                 C   s*   t j| jj ddddddg d S )N   collate data1r   r   r   collate data2r   dbexecutetablesr   insertr!   r#   r#   r$   insert_data%   s    
zCollateTest.insert_datac                 C   s   t tj| | d S Nr   r   r+   r,   fetchallselfr   resultr#   r#   r$   _assert_result/   s    zCollateTest._assert_resultc                 C   sD   t jt j}| t| jjg| jjj	j
| ddg d S )N)r&   r'   )r   r)   )r   requiresZget_order_by_collationr   r7   r   r-   r   order_bycr   ZcollateZasc)r5   Z	collationr#   r#   r$   test_collate_order_by2   s    z!CollateTest.test_collate_order_byN)__name__
__module____qualname____backend__classmethodr%   r0   r7   r   r8   Zorder_by_collationr;   r#   r#   r#   r$   r      s   

	r   c                   @   sl   e Zd ZdZdZedd Zedd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zejjdd ZdS )OrderByLabelTestzTest the dialect sends appropriate ORDER BY expressions when
    labels are used.

    This essentially exercises the "supports_simple_order_by_label"
    setting.

    Tc                 C   sB   t d|tdtddtdttdttdtdtd	td d S )
Nr   r   Tr   xyq2   pr   r    r#   r#   r$   r%   I   s    zOrderByLabelTest.define_tablesc                 C   sD   t j| jj ddddddddddddddd	d
ddg d S )Nr&   r   Zq1Zp3)r   rB   rC   rD   rF   r   Zq2p2   Zq3p1r*   r/   r#   r#   r$   r0   U   s    
zOrderByLabelTest.insert_datac                 C   s   t tj| | d S r1   r2   r4   r#   r#   r$   r7   `   s    zOrderByLabelTest._assert_resultc                 C   s8   | j j}|jjd}| t|g|dddg d S )Nlxr&   r   r   )r-   r   r:   rB   labelr7   r   r9   r5   tablerJ   r#   r#   r$   
test_plainc   s    zOrderByLabelTest.test_plainc                 C   s@   | j j}|jj|jj d}| t|g|dddg d S )NrJ   rM         )	r-   r   r:   rB   rC   rN   r7   r   r9   rO   r#   r#   r$   test_composed_inth   s    z"OrderByLabelTest.test_composed_intc              	   C   s   | j j}|jj|jj d}t|jj|jj	 d}| 
t||g|| dtdfdtdfdtdfg d S )	NrJ   lyr   Zq1p3rS   Zq2p2rU   Zq3p1)r-   r   r:   rB   rC   rN   r   lowerrD   rF   r7   r   r9   descr   u)r5   rP   rJ   rW   r#   r#   r$   test_composed_multiplem   s    &z'OrderByLabelTest.test_composed_multiplec                 C   s<   | j j}|jjd}| t|g| dddg d S )NrJ   rM   rL   rK   )	r-   r   r:   rB   rN   r7   r   r9   rY   rO   r#   r#   r$   test_plain_descv   s     z OrderByLabelTest.test_plain_descc                 C   sD   | j j}|jj|jj d}| t|g|	 dddg d S )NrJ   rT   rR   rM   )
r-   r   r:   rB   rC   rN   r7   r   r9   rY   rO   r#   r#   r$   test_composed_int_desc}   s     z'OrderByLabelTest.test_composed_int_descc                 C   sV   | j j}|jj|jj d}tt|jj	|g
||}| |dddg d S )NrJ   )r&   r   )r&   rS   )r&   rU   )r-   r   r:   rB   rC   rN   r   r   countr   Zgroup_byr9   r7   )r5   rP   exprstmtr#   r#   r$   test_group_by_composed   s    z'OrderByLabelTest.test_group_by_composedN)r<   r=   r>   __doc__r?   r@   r%   r0   r7   rQ   rV   r[   r\   r]   r   r8   Zgroup_by_complex_expressionra   r#   r#   r#   r$   rA   >   s   


	rA   c                   @   s   e Zd ZdZedd Zedd ZdddZd	d
 Ze	j
jdd Ze	j
jdd Ze	j
jdd Ze	j
jdd Ze	j
jdd Ze	j
jdd ZdS )LimitOffsetTestTc                 C   s*   t d|tdtddtdttdt d S Nr   r   Tr   rB   rC   r   r   r   r    r#   r#   r$   r%      s    zLimitOffsetTest.define_tablesc              
   C   sB   t j| jj ddddddddddddddddg d S Nr&   r   )r   rB   rC   r   rH   rS   r*   r/   r#   r#   r$   r0      s    




zLimitOffsetTest.insert_datar#   c                 C   s   t tj|| | d S r1   r2   r5   r   r6   paramsr#   r#   r$   r7      s    zLimitOffsetTest._assert_resultc                 C   s2   | j j}| t|g|jjdddg d S )Nr   r&   r&   r   r   r   r   )r-   r   r7   r   r9   r:   r   limitr5   rP   r#   r#   r$   test_simple_limit   s
    z!LimitOffsetTest.test_simple_limitc                 C   s2   | j j}| t|g|jjdddg d S )Nr   r   r   rH   rH   rH   rS   )r-   r   r7   r   r9   r:   r   offsetrl   r#   r#   r$   test_simple_offset   s
    z"LimitOffsetTest.test_simple_offsetc                 C   s8   | j j}| t|g|jjddddg d S )Nr   r&   rj   rn   )	r-   r   r7   r   r9   r:   r   rk   rp   rl   r#   r#   r$   test_simple_limit_offset   s
    z(LimitOffsetTest.test_simple_limit_offsetc                 C   sZ   | j j}t|g|jjdd}|jt	j
jddid}t|}| |ddg dS )	z7test that 'literal binds' mode works - no bound params.r   r&   Zliteral_bindsT)dialectcompile_kwargsrj   rn   N)r-   r   r   r9   r:   r   rk   rp   compiler   r+   rs   strr7   )r5   rP   r`   Zsqlr#   r#   r$   test_limit_offset_nobinds   s      z)LimitOffsetTest.test_limit_offset_nobindsc                 C   s>   | j j}| jt|g|jjtdddgddid d S )Nlri   rj   r   rh   )	r-   r   r7   r   r9   r:   r   rk   r	   rl   r#   r#   r$   test_bound_limit   s    z LimitOffsetTest.test_bound_limitc                 C   s>   | j j}| jt|g|jjtdddgddid d S )Norn   ro   r   ry   )	r-   r   r7   r   r9   r:   r   rp   r	   rl   r#   r#   r$   test_bound_offset   s    z!LimitOffsetTest.test_bound_offsetc                 C   sJ   | j j}| jt|g|jjtd	tdddgdddd d S )	Nrx   r{   rj   rn   r   r&   )rx   r{   ry   )
r-   r   r7   r   r9   r:   r   rk   r	   rp   rl   r#   r#   r$   test_bound_limit_offset   s    
z'LimitOffsetTest.test_bound_limit_offsetN)r#   )r<   r=   r>   r?   r@   r%   r0   r7   rm   r   r8   rp   rq   rr   rw   Zbound_limit_offsetrz   r|   r}   r#   r#   r#   r$   rc      s&   
	






rc   c                   @   s   e Zd ZdZedd Zedd ZdddZd	d
 Zdd Z	e
jje
jjdd Ze
jjdd Zdd Ze
jjdd Zdd ZdS )CompoundSelectTestTc                 C   s*   t d|tdtddtdttdt d S rd   re   r    r#   r#   r$   r%      s    z CompoundSelectTest.define_tablesc              
   C   sB   t j| jj ddddddddddddddddg d S rf   r*   r/   r#   r#   r$   r0      s    




zCompoundSelectTest.insert_datar#   c                 C   s   t tj|| | d S r1   r2   rg   r#   r#   r$   r7     s    z!CompoundSelectTest._assert_resultc                 C   s`   | j j}t|g|jjdk}t|g|jjdk}t||}| ||jjddg d S Nr   r   rj   rn   )	r-   r   r   wherer:   r   r   r7   r9   r5   rP   s1s2u1r#   r#   r$   test_plain_union  s
    
z#CompoundSelectTest.test_plain_unionc                 C   sh   | j j}t|g|jjdk}t|g|jjdk}t||  }| |	|jjddg d S r   )
r-   r   r   r   r:   r   r   aliasr7   r9   r   r#   r#   r$   test_select_from_plain_union  s
    z/CompoundSelectTest.test_select_from_plain_unionc                 C   s   | j j}t|g|jjdkd|jj}t|g|jjdkd|jj}t||d}| 	||jjddg d S Nr   r&   r   rj   rn   )
r-   r   r   r   r:   r   rk   r9   r   r7   r   r#   r#   r$   &test_limit_offset_selectable_in_unions  s&    



z9CompoundSelectTest.test_limit_offset_selectable_in_unionsc                 C   sz   | j j}t|g|jjdk|jj}t|g|jjdk|jj}t||d}| 	||jjddg d S r   )
r-   r   r   r   r:   r   r9   r   rk   r7   r   r#   r#   r$   "test_order_by_selectable_in_unions/  s
    ""z5CompoundSelectTest.test_order_by_selectable_in_unionsc                 C   sn   | j j}t|g|jjdk }t|g|jjdk }t||d}| 	|
|jjddg d S r   )r-   r   r   r   r:   r   Zdistinctr   rk   r7   r9   r   r#   r#   r$   "test_distinct_selectable_in_unions8  s
    z5CompoundSelectTest.test_distinct_selectable_in_unionsc                 C   s   | j j}t|g|jjdkd|jj}t|g|jjdkd|jj}t||	 }| 
| d|jjddg d S r   )r-   r   r   r   r:   r   rk   r9   r   r   r7   r   r#   r#   r$   &test_limit_offset_in_unions_from_alias@  s,    



 z9CompoundSelectTest.test_limit_offset_in_unions_from_aliasc                 C   s   | j j}t|g|jjdkd|jj  }t|g|jjdkd|jj  }t	||d}| 
||jjddg d S r   )r-   r   r   r   r:   r   rk   r9   r   r   r7   r   r#   r#   r$   .test_limit_offset_aliased_selectable_in_unionsV  s&    


	


	zACompoundSelectTest.test_limit_offset_aliased_selectable_in_unionsN)r#   )r<   r=   r>   r?   r@   r%   r0   r7   r   r   r   r8   Zorder_by_col_from_unionZ/parens_in_union_contained_select_w_limit_offsetr   Z0parens_in_union_contained_select_wo_limit_offsetr   r   r   r   r#   r#   r#   r$   r~      s"   
	



r~   c                   @   s   e Zd ZdZedd Zedd Zd ddZd	d
 Ze	j
jdd Ze	j
jdd Zdd Ze	j
jdd Ze	j
jdd Zdd Zdd Zdd Zdd Zdd ZdS )!ExpandingBoundInTestTc              
   C   s6   t d|tdtddtdttdttdtd d S )	Nr   r   Tr   rB   rC   zrE   r   r    r#   r#   r$   r%   p  s    z"ExpandingBoundInTest.define_tablesc                 C   sJ   t j| jj dddddddddddddddddd	d
dg d S )Nr&   r   Zz1)r   rB   rC   r   r   z2rH   z3rS   z4r*   r/   r#   r#   r$   r0   {  s    
z ExpandingBoundInTest.insert_datar#   c                 C   s   t tj|| | d S r1   r2   rg   r#   r#   r$   r7     s    z#ExpandingBoundInTest._assert_resultc                 C   sj   | j j}t|jjg|jjtddd|jj	tddd
|jj}| j|g g g dd d S )NrD   T	expandingrF   )rD   rF   ry   )r-   r   r   r:   r   r   rB   r   r	   rC   r9   r7   r5   rP   r`   r#   r#   r$   test_multiple_empty_sets  s    z-ExpandingBoundInTest.test_multiple_empty_setsc                 C   sZ   | j j}t|jjgt|jj|jj	t
ddd|jj}| j|g dg id d S NrD   Tr   ry   r-   r   r   r:   r   r   r   rB   r   r   r	   r9   r7   r   r#   r#   r$   test_empty_heterogeneous_tuples  s    

z4ExpandingBoundInTest.test_empty_heterogeneous_tuplesc                 C   sZ   | j j}t|jjgt|jj|jj	t
ddd|jj}| j|g dg id d S r   r-   r   r   r:   r   r   r   rB   rC   r   r	   r9   r7   r   r#   r#   r$   test_empty_homogeneous_tuples  s    

z2ExpandingBoundInTest.test_empty_homogeneous_tuplesc                 C   s\   | j j}t|jjg|jjtddd	|jj}| j
|dddgdddd	gid
 d S )NrD   Tr   rL   rM   rH   r   r   rH   ry   r-   r   r   r:   r   r   rB   r   r	   r9   r7   r   r#   r#   r$   test_bound_in_scalar  s    z)ExpandingBoundInTest.test_bound_in_scalarc                 C   sf   | j j}t|jjgt|jj|jj	t
ddd|jj}| j|dddgdddd	gid
 d S )NrD   Tr   rL   rM   r   )r   r   )r   rH   )rH   rS   ry   r   r   r#   r#   r$   test_bound_in_two_tuple  s    

  z,ExpandingBoundInTest.test_bound_in_two_tuplec                 C   sf   | j j}t|jjgt|jj|jj	t
ddd|jj}| j|dddgdddd	gid
 d S )NrD   Tr   rL   rM   r   )r   r   )r   r   )rH   r   ry   r   r   r#   r#   r$   %test_bound_in_heterogeneous_two_tuple  s    

z:ExpandingBoundInTest.test_bound_in_heterogeneous_two_tuplec                 C   sP   | j j}t|jjg|jjtddd	|jj}| j
|g dg id d S r   r   r   r#   r#   r$   test_empty_set_against_integer  s    z3ExpandingBoundInTest.test_empty_set_against_integerc                 C   sX   | j j}t|jjg|jjtddd	|jj}| j
|ddddgdg id d S 	NrD   Tr   rK   rL   rM   r   ry   )r-   r   r   r:   r   r   rB   notin_r	   r9   r7   r   r#   r#   r$   'test_empty_set_against_integer_negation  s    z<ExpandingBoundInTest.test_empty_set_against_integer_negationc                 C   sP   | j j}t|jjg|jjtddd	|jj}| j
|g dg id d S r   )r-   r   r   r:   r   r   r   r   r	   r9   r7   r   r#   r#   r$   test_empty_set_against_string  s    z2ExpandingBoundInTest.test_empty_set_against_stringc                 C   sX   | j j}t|jjg|jjtddd	|jj}| j
|ddddgdg id d S r   )r-   r   r   r:   r   r   r   r   r	   r9   r7   r   r#   r#   r$   &test_empty_set_against_string_negation
  s    z;ExpandingBoundInTest.test_empty_set_against_string_negationc              	   C   sL   t tt tddddt fgt dg}ttj	|
 d d d S )NZfoor#   T)valuer   )Zelse_    )Fr   )r   r
   r   r   r	   r   r   r   r+   r,   Zfetchone)r5   r`   r#   r#   r$   test_null_in_empty_set_is_false  s    z4ExpandingBoundInTest.test_null_in_empty_set_is_falseN)r#   )r<   r=   r>   r?   r@   r%   r0   r7   r   r   r8   Ztuple_inr   r   r   r   r   r   r   r   r   r   r#   r#   r#   r$   r   m  s*   







r   c                   @   s   e Zd ZdZdZdZedd Zedd Zdd	 Z	d
d Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% ZdS )&LikeFunctionsTestTonceNc                 C   s&   t d|tdtddtdtd d S )Nr   r   Tr   r   rE   r   r    r#   r#   r$   r%   .  s    zLikeFunctionsTest.define_tablesc                 C   sj   t j| jj ddddddddddd	dd
dddddddddddddddddg
 d S )Nr&   Zabcdefgr(   r   zab/cdefgr   zab%cdefgrH   Zab_cdefgrS   zabcde/fg   zabcde%fgrU   zab#cdefg   Zab9cdefg	   zabcde#fg
   Zabcd9fgr*   r/   r#   r#   r$   r0   7  s    
zLikeFunctionsTest.insert_datac              	   C   sP   | j j}tj *}dd |t|jjg	|D }W 5 Q R X t
|| d S )Nc                 S   s   h | ]
\}|qS r#   r#   ).0r   r#   r#   r$   	<setcomp>M  s   z*LikeFunctionsTest._test.<locals>.<setcomp>)r-   r   r   r+   connectr,   r   r:   r   r   r   )r5   r_   expectedr   connZrowsr#   r#   r$   _testI  s    zLikeFunctionsTest._testc                 C   s6   | j jjj}| |ddddddddd	d
dh
 d S )Nab%cr&   r   r   rH   rS   r   rU   r   r   r   r-   r   r:   r   r   
startswithr5   colr#   r#   r$   test_startswith_unescapedV  s    z+LikeFunctionsTest.test_startswith_unescapedc                 C   s(   | j jjj}| |jddddh d S )Nr   T
autoescaper   r   r   r#   r#   r$   test_startswith_autoescapeZ  s    z,LikeFunctionsTest.test_startswith_autoescapec                 C   s:   | j jjj}| |tddddddddd	d
dh
 d S )Nz'ab%c'r&   r   r   rH   rS   r   rU   r   r   r   )r-   r   r:   r   r   r   r   r   r#   r#   r$   test_startswith_sqlexpr^  s
    z)LikeFunctionsTest.test_startswith_sqlexprc                 C   s(   | j jjj}| |jddddh d S )Nzab##c#escaperU   r   r   r#   r#   r$   test_startswith_escapee  s    z(LikeFunctionsTest.test_startswith_escapec                 C   sD   | j jjj}| |jdddddh | |jdddddh d S )Nr   Tr   r   r   r   zab#crU   r   r   r#   r#   r$   !test_startswith_autoescape_escapei  s    z3LikeFunctionsTest.test_startswith_autoescape_escapec                 C   s4   | j jjj}| |ddddddddd	d
h	 d S )Ne%fgr&   r   r   rH   rS   r   rU   r   r   r-   r   r:   r   r   endswithr   r#   r#   r$   test_endswith_unescapedn  s    z)LikeFunctionsTest.test_endswith_unescapedc                 C   s8   | j jjj}| |tddddddddd	d
h	 d S )Nz'e%fg'r&   r   r   rH   rS   r   rU   r   r   )r-   r   r:   r   r   r   r   r   r#   r#   r$   test_endswith_sqlexprr  s
     z'LikeFunctionsTest.test_endswith_sqlexprc                 C   s(   | j jjj}| |jddddh d S )Nr   Tr   r   r   r   r#   r#   r$   test_endswith_autoescapex  s    z*LikeFunctionsTest.test_endswith_autoescapec                 C   s(   | j jjj}| |jddddh d S )Nze##fgr   r   r   r   r   r#   r#   r$   test_endswith_escape|  s    z&LikeFunctionsTest.test_endswith_escapec                 C   sD   | j jjj}| |jdddddh | |jdddddh d S )Nr   Tr   r   r   ze#fgr   r   r   r#   r#   r$   test_endswith_autoescape_escape  s    z1LikeFunctionsTest.test_endswith_autoescape_escapec                 C   s4   | j jjj}| |ddddddddd	d
h	 d S )Nb%cder&   r   r   rH   rS   r   rU   r   r   r-   r   r:   r   r   containsr   r#   r#   r$   test_contains_unescaped  s    z)LikeFunctionsTest.test_contains_unescapedc                 C   s(   | j jjj}| |jddddh d S )Nr   Tr   r   r   r   r#   r#   r$   test_contains_autoescape  s    z*LikeFunctionsTest.test_contains_autoescapec                 C   s(   | j jjj}| |jddddh d S )Nzb##cder   r   rU   r   r   r#   r#   r$   test_contains_escape  s    z&LikeFunctionsTest.test_contains_escapec                 C   sD   | j jjj}| |jdddddh | |jdddddh d S )Nzb%cdTr   r   r   zb#cdrU   r   r   r#   r#   r$   test_contains_autoescape_escape  s    z1LikeFunctionsTest.test_contains_autoescape_escape)r<   r=   r>   r?   Zrun_insertsZrun_deletesr@   r%   r0   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   r#   r#   r$   r   (  s,   

r   c                   @   s<   e Zd ZdZdZedd Zedd Zdd Zd	d
 Z	dS )ComputedColumnTestT)Zcomputed_columnsc                 C   s>   t d|tdtddtdttdttdtdttd	 d S )
Nsquarer   Tr   sideareazside * side	perimeterz4 * side)r   r   r   r   r    r#   r#   r$   r%     s    z ComputedColumnTest.define_tablesc              	   C   s>   t j *}|| jj ddddddg W 5 Q R X d S )Nr&   r   )r   r   *   )r   r+   beginr,   r-   r   r.   )r!   r   r#   r#   r$   r0     s
    
zComputedColumnTest.insert_datac              	   C   sX   t j D}|ttdg| jj	| jjj
j }t|ddg W 5 Q R X d S )N*)r&   r   r   (   )r   r        )r   r+   r   r,   r   r   select_fromr-   r   r9   r:   r   r3   r   r5   r   resr#   r#   r$   test_select_all  s    
z"ComputedColumnTest.test_select_allc              	   C   sf   t j R}|t| jjjj| jjjj	g
| jj| jjjj }t|ddg W 5 Q R X d S )N)r   r   )r   r   )r   r+   r   r,   r   r-   r   r:   r   r   r   r9   r   r3   r   r   r#   r#   r$   test_select_columns  s    
z&ComputedColumnTest.test_select_columnsN)
r<   r=   r>   r?   __requires__r@   r%   r0   r   r   r#   r#   r#   r$   r     s   


	r   N)! r   r   Z
assertionsr   r   Zschemar   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Z
TablesTestr   rA   rc   r~   r   r   r   r#   r#   r#   r$   <module>   s:   %R_~ <o