o
    y¬´\?  ã                   @   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 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_)ÚColumn)ÚTableé   )Ú	bindparam)Úfunc)ÚInteger)Úliteral_column)Úselect)ÚString)Útesting)Ú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   ó&   t d|tdtdd�tdtdƒƒƒ d S )NÚ
some_tableÚidT©Úprimary_keyÚdataéd   ©r   r   r
   r   ©ÚclsÚmetadata© r   úV/var/www/html/env/lib/python3.10/site-packages/sqlalchemy/testing/suite/test_select.pyÚdefine_tables   ó   ü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   ó   t tj |¡ ¡ |ƒ d S ©N©r   r   r'   r(   Úfetchall©Úselfr   Úresultr   r   r   Ú_assert_result(   ó   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   ÚrequiresÚget_order_by_collationr   r4   r   r)   r   Úorder_byÚcr   ÚcollateÚasc)r2   Ú	collationr   r   r   Útest_collate_order_by+   s   ÿüz!CollateTest.test_collate_order_byN)Ú__name__Ú
__module__Ú__qualname__Ú__backend__Úclassmethodr    r,   r4   r   r6   Ú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 )ÚOrderByLabelTestz©Test 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Úqé2   Úpr   r   r   r   r   r    B   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   Úq1Úp3)r   rE   rF   rG   rI   r   Úq2Úp2é   Úq3Úp1r&   r+   r   r   r   r,   N   s   
ýþzOrderByLabelTest.insert_datac                 C   r-   r.   r/   r1   r   r   r   r4   Y   r5   zOrderByLabelTest._assert_resultc                 C   s6   | j j}|jj d¡}|  t|gƒ |¡g d¢¡ d S )NÚlx)©r"   ©r   ©r   )r)   r   r9   rE   Úlabelr4   r   r8   ©r2   ÚtablerQ   r   r   r   Ú
test_plain\   s    zOrderByLabelTest.test_plainc                 C   s>   | j j}|jj|jj  d¡}|  t|gƒ |¡g d¢¡ d S )NrQ   )rT   ©é   ©é   )	r)   r   r9   rE   rF   rU   r4   r   r8   rV   r   r   r   Útest_composed_inta   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 )	NrQ   Úlyr   Úq1p3rZ   Úq2p2r\   Úq3p1)r)   r   r9   rE   rF   rU   r	   ÚlowerrG   rI   r4   r   r8   Údescr   Úu)r2   rW   rQ   r^   r   r   r   Útest_composed_multiplef   s   &þz'OrderByLabelTest.test_composed_multiplec                 C   s:   | j j}|jj d¡}|  t|gƒ | ¡ ¡g d¢¡ d S )NrQ   )rT   rS   rR   )	r)   r   r9   rE   rU   r4   r   r8   rc   rV   r   r   r   Útest_plain_desco   s
   ÿz OrderByLabelTest.test_plain_descc                 C   sB   | j j}|jj|jj  d¡}|  t|gƒ | 	¡ ¡g d¢¡ d S )NrQ   )r[   rY   rT   )
r)   r   r9   rE   rF   rU   r4   r   r8   rc   rV   r   r   r   Útest_composed_int_descv   s
   ÿz'OrderByLabelTest.test_composed_int_descc                 C   sT   | j j}|jj|jj  d¡}tt |jj	¡|gƒ 
|¡ |¡}|  |g d¢¡ d S )NrQ   ))r"   r   )r"   rZ   )r"   r\   )r)   r   r9   rE   rF   rU   r   r	   Úcountr   Úgroup_byr8   r4   )r2   rW   ÚexprÚstmtr   r   r   Útest_group_by_composed}   s   ýz'OrderByLabelTest.test_group_by_composedN)r>   r?   r@   Ú__doc__rA   rB   r    r,   r4   rX   r]   re   rf   rg   r   r6   Úgroup_by_complex_expressionrl   r   r   r   r   rD   7   s    


	rD   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   ó*   t d|tdtdd�tdtƒtdtƒƒ d S ©Nr   r   Tr   rE   rF   ©r   r   r
   r   r   r   r   r    Œ   ó   ûzLimitOffsetTest.define_tablesc              
   C   óB   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   rE   rF   r   rN   rZ   r&   r+   r   r   r   r,   –   ó   




üþzLimitOffsetTest.insert_datar   c                 C   ó   t tj ||¡ ¡ |ƒ d S r.   r/   ©r2   r   r3   Úparamsr   r   r   r4   ¢   ó   zLimitOffsetTest._assert_resultc                 C   ó2   | j j}|  t|gƒ |jj¡ d¡ddg¡ d S )Nr   ©r"   r"   r   ©r   r   r   )r)   r   r4   r   r8   r9   r   Úlimit©r2   rW   r   r   r   Útest_simple_limit¥   s
   þz!LimitOffsetTest.test_simple_limitc                 C   r{   )Nr   ©r   r   rN   ©rN   rN   rZ   )r)   r   r4   r   r8   r9   r   Úoffsetr   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"   r}   r�   )	r)   r   r4   r   r8   r9   r   r~   rƒ   r   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"   Úliteral_bindsT)ÚdialectÚcompile_kwargsr}   r�   N)r)   r   r   r8   r9   r   r~   rƒ   Úcompiler   r'   r‡   Ústrr4   )r2   rW   rk   Úsqlr   r   r   Útest_limit_offset_nobinds¼   s    ÿz)LimitOffsetTest.test_limit_offset_nobindsc                 C   ó>   | j j}| jt|gƒ |jj¡ tdƒ¡ddgddid� d S )NÚlr|   r}   r   ©ry   )	r)   r   r4   r   r8   r9   r   r~   r   r   r   r   r   Útest_bound_limitÉ   ó   
ýz LimitOffsetTest.test_bound_limitc                 C   r�   )NÚor�   r‚   r   r�   )	r)   r   r4   r   r8   r9   r   rƒ   r   r   r   r   r   Útest_bound_offsetÒ   r‘   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 )	NrŽ   r’   r}   r�   r   r"   )rŽ   r’   r�   )
r)   r   r4   r   r8   r9   r   r~   r   rƒ   r   r   r   r   Útest_bound_limit_offsetÛ   s   



úz'LimitOffsetTest.test_bound_limit_offsetN©r   )r>   r?   r@   rA   rB   r    r,   r4   r€   r   r6   rƒ   r„   r…   rŒ   Úbound_limit_offsetr�   r“   r”   r   r   r   r   ro   ‰   s(    
	






ro   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   rp   rq   rr   r   r   r   r   r    ë   rs   z CompoundSelectTest.define_tablesc              
   C   rt   ru   r&   r+   r   r   r   r,   õ   rv   zCompoundSelectTest.insert_datar   c                 C   rw   r.   r/   rx   r   r   r   r4     rz   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   r}   r�   )	r)   r   r   Úwherer9   r   r   r4   r8   ©r2   rW   Ú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™   r9   r   r   Úaliasr4   r8   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   r}   r�   )
r)   r   r   r™   r9   r   r~   r8   r   r4   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™   r9   r   r8   r   r~   r4   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™   r9   r   Údistinctr   r~   r4   r8   rš   r   r   r   Ú"test_distinct_selectable_in_unions1  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™   r9   r   r~   r8   r   rŸ   r4   rš   r   r   r   Ú&test_limit_offset_in_unions_from_alias9  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™   r9   r   r~   r8   rŸ   r   r4   rš   r   r   r   Ú.test_limit_offset_aliased_selectable_in_unionsO  s"   
ú	
ú	zACompoundSelectTest.test_limit_offset_aliased_selectable_in_unionsNr•   )r>   r?   r@   rA   rB   r    r,   r4   rž   r    r   r6   Úorder_by_col_from_unionÚ/parens_in_union_contained_select_w_limit_offsetr¢   Ú0parens_in_union_contained_select_wo_limit_offsetr£   r¥   r¦   r§   r   r   r   r   r—   è   s$    
	



r—   c                   @   sJ   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dS )ÚExpandingBoundInTestTc                 C   rp   rq   rr   r   r   r   r   r    i  rs   z"ExpandingBoundInTest.define_tablesc              
   C   rt   ru   r&   r+   r   r   r   r,   s  rv   z ExpandingBoundInTest.insert_datar   c                 C   rw   r.   r/   rx   r   r   r   r4     rz   z#ExpandingBoundInTest._assert_resultc                 C   sX   | j j}t|jjgƒ |jj tddd�¡¡ 	|jj¡}| j
|g d¢dg d¢id� d S )NrG   T©Ú	expanding©rS   rT   )rN   )r   r   rN   r�   )r)   r   r   r9   r   r™   rE   Úin_r   r8   r4   ©r2   rW   rk   r   r   r   Útest_bound_in_scalar‚  s   
ý z)ExpandingBoundInTest.test_bound_in_scalarc                 C   sb   | j j}t|jjgƒ t|jj|jjƒ 	t
ddd�¡¡ |jj¡}| j|g d¢dg d¢id� d S )NrG   Tr¬   r®   ))r   r   )r   rN   )rN   rZ   r�   )r)   r   r   r9   r   r™   r   rE   rF   r¯   r   r8   r4   r°   r   r   r   Útest_bound_in_two_tuple�  s   
ÿÿ
ù

ÿz,ExpandingBoundInTest.test_bound_in_two_tupleNr•   )r>   r?   r@   rA   rB   r    r,   r4   r±   r   r6   Útuple_inr²   r   r   r   r   r«   f  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   r   )Nr   r   Tr   r   rH   r   r   r   r   r   r    ¦  r!   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"   Úabcdefgr$   r   zab/cdefgr   zab%cdefgrN   Úab_cdefgrZ   zabcde/fgé   zabcde%fgr\   zab#cdefgé   Úab9cdefgé	   zabcde#fgé
   Úabcd9fgr&   r+   r   r   r   r,   ¯  s   
öþzLikeFunctionsTest.insert_datac                 C   sd   | j j}tj ¡ �}dd„ | t|jjgƒ 	|¡¡D ƒ}W d   ƒ n1 s&w   Y  t
||ƒ d S )Nc                 S   s   h | ]\}|’qS r   r   )Ú.0Úvaluer   r   r   Ú	<setcomp>Å  s    ÿÿz*LikeFunctionsTest._test.<locals>.<setcomp>)r)   r   r   r'   Úconnectr(   r   r9   r   r™   r   )r2   rj   Úexpectedr   ÚconnÚrowsr   r   r   Ú_testÁ  s   ÿþÿzLikeFunctionsTest._testc                 C   ó&   | j jjj}|  | d¡h d£¡ d S )Núab%c¾
   r"   r   r   rN   rZ   r¸   r\   r¹   r»   r¼   ©r)   r   r9   r   rÅ   Ú
startswith©r2   Úcolr   r   r   Útest_startswith_unescapedÎ  ó   z+LikeFunctionsTest.test_startswith_unescapedc                 C   ó(   | j jjj}|  |jddd�dh¡ d S )NrÇ   T©Ú
autoescaper   rÉ   rË   r   r   r   Útest_startswith_autoescapeÒ  ó   z,LikeFunctionsTest.test_startswith_autoescapec                 C   ó*   | j jjj}|  | tdƒ¡h d£¡ d S )Nz'ab%c'rÈ   )r)   r   r9   r   rÅ   rÊ   r   rË   r   r   r   Útest_startswith_sqlexprÖ  s
   þz)LikeFunctionsTest.test_startswith_sqlexprc                 C   rÏ   )Nzab##cú#©Úescaper\   rÉ   rË   r   r   r   Útest_startswith_escapeÝ  rÓ   z(LikeFunctionsTest.test_startswith_escapec                 C   óD   | 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#cr\   rÉ   rË   r   r   r   Ú!test_startswith_autoescape_escapeá  ó   z3LikeFunctionsTest.test_startswith_autoescape_escapec                 C   rÆ   )Núe%fg¾	   r"   r   r   rN   rZ   r¸   r\   r¹   r»   ©r)   r   r9   r   rÅ   ÚendswithrË   r   r   r   Útest_endswith_unescapedæ  rÎ   z)LikeFunctionsTest.test_endswith_unescapedc                 C   rÔ   )Nz'e%fg'rß   )r)   r   r9   r   rÅ   rá   r   rË   r   r   r   Útest_endswith_sqlexprê  s   ÿz'LikeFunctionsTest.test_endswith_sqlexprc                 C   rÏ   )NrÞ   TrÐ   r¸   rà   rË   r   r   r   Útest_endswith_autoescapeð  rÓ   z*LikeFunctionsTest.test_endswith_autoescapec                 C   rÏ   )Nze##fgrÖ   r×   r»   rà   rË   r   r   r   Útest_endswith_escapeô  rÓ   z&LikeFunctionsTest.test_endswith_escapec                 C   rÚ   )NrÞ   TrÖ   rÛ   r¸   ze#fgr»   rà   rË   r   r   r   Útest_endswith_autoescape_escapeø  rÝ   z1LikeFunctionsTest.test_endswith_autoescape_escapec                 C   rÆ   )Núb%cderß   ©r)   r   r9   r   rÅ   ÚcontainsrË   r   r   r   Útest_contains_unescapedý  rÎ   z)LikeFunctionsTest.test_contains_unescapedc                 C   rÏ   )Nrç   TrÐ   r   rè   rË   r   r   r   Útest_contains_autoescape  rÓ   z*LikeFunctionsTest.test_contains_autoescapec                 C   rÏ   )Nzb##cderÖ   r×   r\   rè   rË   r   r   r   Útest_contains_escape  rÓ   z&LikeFunctionsTest.test_contains_escapec                 C   rÚ   )Nzb%cdTrÖ   rÛ   r   zb#cdr\   rè   rË   r   r   r   Útest_contains_autoescape_escape	  rÝ   z1LikeFunctionsTest.test_contains_autoescape_escape)r>   r?   r@   rA   Úrun_insertsÚrun_deletesrB   r    r,   rÅ   rÍ   rÒ   rÕ   rÙ   rÜ   râ   rã   rä   rå   ræ   rê   rë   rì   rí   r   r   r   r   r´      s.    

r´   N)Ú r   r   Ú
assertionsr   Úschemar   r   r   r	   r
   r   r   r   r   r   r   r   Ú
TablesTestr   rD   ro   r—   r«   r´   r   r   r   r   Ú<module>   s*    %R_~: