U
    ÌZj¨Ø  ã                   @   sÜ  d dl Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lm	Z	 dd
l
mZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  dd lm!Z! dd!lm"Z" dd"lm#Z# dd#lm$Z$ dd$lm%Z% dd%lm&Z& dd&l'm(Z( dd'l'm)Z) d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/d0„ d0ej+ƒZ0G d1d2„ d2ej+ƒZ1G d3d4„ d4ej+ƒZ2G d5d6„ d6eeej+ƒZ3G d7d8„ d8ej+ƒZ4G d9d:„ d:ej+ƒZ5G d;d<„ d<ej+ƒZ6G d=d>„ d>ej+ƒZ7G d?d@„ d@ej+ƒZ8G dAdB„ dBej+ƒZ9G dCdD„ dDeej+ƒZ:G dEdF„ dFej+ƒZ;dS )Gé    Né   )ÚAssertsCompiledSQL)ÚAssertsExecutionResults)Úconfig)Úfixtures)Úassert_raises)Úeq_)Úin_)Ú	CursorSQL)ÚColumn)ÚTableé   )Ú	bindparam)Úcase)Úcolumn)ÚComputed)Úexists)Úfalse)Ú
ForeignKey)Úfunc)ÚIdentity)ÚInteger)Úliteral)Úliteral_column)Únull)Úselect)ÚString)Útable)Útesting)Útext)Útrue)Útuple_)Ú	TupleType)Úunion)Úutil)Úvalues)ÚDatabaseError)ÚProgrammingError)Úcollections_abcc                   @   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©Úprimary_keyÚdataéd   ©r   r   r   r   ©ÚclsÚmetadata© r4   úg/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/sqlalchemy/testing/suite/test_select.pyÚdefine_tables-   s    üzCollateTest.define_tablesc                 C   s(   |  | jj ¡ dddœdddœg¡ d S )Né   úcollate data1©r+   r.   r   úcollate data2©ÚexecuteÚtablesr*   Úinsert©r2   Ú
connectionr4   r4   r5   Úinsert_data6   s    
þþzCollateTest.insert_datac              	   C   s.   t j ¡ �}t| |¡ ¡ |ƒ W 5 Q R X d S ©N©r   ÚdbÚconnectr   r<   Úfetchall©Úselfr   ÚresultÚconnr4   r4   r5   Ú_assert_result@   s    zCollateTest._assert_resultc                 C   sB   t j t j¡}|  t| jjƒ | jjj	j
 |¡ ¡ ¡ddg¡ d S )N)r7   r8   )r   r:   )r   ÚrequiresZget_order_by_collationr   rK   r   r=   r*   Úorder_byÚcr.   ZcollateÚasc)rH   Z	collationr4   r4   r5   Útest_collate_order_byD   s    ÿüz!CollateTest.test_collate_order_byN)Ú__name__Ú
__module__Ú__qualname__Ú__backend__Úclassmethodr6   rA   rK   r   rL   Zorder_by_collationrP   r4   r4   r4   r5   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   Úpr0   r1   r4   r4   r5   r6   [   s    ùzOrderByLabelTest.define_tablesc                 C   sB   |  | jj ¡ ddddddœddddddœddd	d
ddœg¡ d S )Nr7   r   Úq1Zp3)r+   rW   rX   rY   r[   r   Úq2Zp2é   Zq3Úp1r;   r?   r4   r4   r5   rA   g   s    
ýþzOrderByLabelTest.insert_datac              	   C   s.   t j ¡ �}t| |¡ ¡ |ƒ W 5 Q R X d S rB   rC   rG   r4   r4   r5   rK   r   s    zOrderByLabelTest._assert_resultc                 C   s6   | j j}|jj d¡}|  t|ƒ |¡dddg¡ d S )NÚlx©r7   ©r   ©r   )r=   r*   rN   rW   ÚlabelrK   r   rM   ©rH   r   r`   r4   r4   r5   Ú
test_plainv   s    zOrderByLabelTest.test_plainc                 C   s>   | j j}|jj|jj  d¡}|  t|ƒ |¡dddg¡ d S )Nr`   rc   ©é   ©é   )	r=   r*   rN   rW   rX   rd   rK   r   rM   re   r4   r4   r5   Útest_composed_int{   s    z"OrderByLabelTest.test_composed_intc              	   C   s€   | j j}|jj|jj  d¡}t |jj¡|jj	  d¡}|  
t||ƒ || ¡ ¡dt d¡fdt d¡fdt d¡fg¡ d S )	Nr`   Úlyr   Zq1p3rh   Zq2p2rj   Zq3p1)r=   r*   rN   rW   rX   rd   r   ÚlowerrY   r[   rK   r   rM   Údescr$   Úu)rH   r   r`   rl   r4   r4   r5   Útest_composed_multiple€   s    &þz'OrderByLabelTest.test_composed_multiplec                 C   s:   | j j}|jj d¡}|  t|ƒ | ¡ ¡dddg¡ d S )Nr`   rc   rb   ra   )	r=   r*   rN   rW   rd   rK   r   rM   rn   re   r4   r4   r5   Útest_plain_desc‰   s    z OrderByLabelTest.test_plain_descc                 C   sB   | j j}|jj|jj  d¡}|  t|ƒ | 	¡ ¡dddg¡ d S )Nr`   ri   rg   rc   )
r=   r*   rN   rW   rX   rd   rK   r   rM   rn   re   r4   r4   r5   Útest_composed_int_descŽ   s    z'OrderByLabelTest.test_composed_int_descc                 C   sT   | j j}|jj|jj  d¡}tt |jj	¡|ƒ 
|¡ |¡}|  |dddg¡ d S )Nr`   )r7   r   )r7   rh   )r7   rj   )r=   r*   rN   rW   rX   rd   r   r   Úcountr+   Zgroup_byrM   rK   )rH   r   ÚexprÚstmtr4   r4   r5   Útest_group_by_composed“   s
    ÿz'OrderByLabelTest.test_group_by_composedN)rQ   rR   rS   Ú__doc__rT   rU   r6   rA   rK   rf   rk   rp   rq   rr   r   rL   Zgroup_by_complex_expressionrv   r4   r4   r4   r5   rV   P   s   


	rV   c                   @   s   e Zd ZdZdZdd„ ZdS )ÚValuesExpressionTest)Ztable_value_constructorTc                 C   sH   t tdtƒtdtƒdd� dddg¡}t| t|ƒ¡ ¡ dddgƒ d S )Nr+   ÚnameZ	my_values)ry   )r7   Zname1)r   Zname2)r   Zname3)	r%   r   r   r   r.   r   r<   r   Úall)rH   r@   Z
value_exprr4   r4   r5   Útest_tuples¢   s      ÿþþz ValuesExpressionTest.test_tuplesN)rQ   rR   rS   Ú__requires__rT   r{   r4   r4   r4   r5   rx   �   s   rx   c                   @   s8  e Zd ZdZedd„ ƒZedd„ ƒZdIdd	„ZdJd
d„Zdd„ Z	dd„ Z
ejjdd„ ƒZejjdd„ ƒZejdddgdddgdddgdd�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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d0d1„ ƒZ ejjd2d3„ ƒZ!ejjejj"d4d5„ ƒƒZ#ejjd6d7„ ƒZ$ejjd8d9„ ƒZ%ejj&d:d;„ ƒZ'ejj&ejj(d<d=„ ƒƒZ)ejj&ejj(d>d?„ ƒƒZ*ejj+d@dA„ ƒZ,ejj+ejj(dBdC„ ƒƒZ-ejj&ejj+dDdE„ ƒƒZ.ejj&ejj+ejj(dFdG„ ƒƒƒZ/dHS )KÚFetchLimitOffsetTestTc                 C   s*   t d|tdtdd�tdtƒtdtƒƒ d S ©Nr*   r+   Tr,   rW   rX   ©r   r   r   r1   r4   r4   r5   r6   °   s    ûz"FetchLimitOffsetTest.define_tablesc                 C   sJ   |  | 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 )Nr7   r   ©r+   rW   rX   r   r^   rh   é   r;   r?   r4   r4   r5   rA   º   s    





ûþz FetchLimitOffsetTest.insert_datar4   Fc                 C   sT   |r:|  ||¡ ¡ }tt|ƒt|ƒƒ tt|ƒt|ƒƒ nt|  ||¡ ¡ |ƒ d S rB   )r<   rF   r   ÚlenÚset)rH   r@   r   rI   ÚparamsÚset_Z	query_resr4   r4   r5   rK   Ç   s
    z#FetchLimitOffsetTest._assert_resultc                 C   s(   t jjdd�}t| ||¡ ¡ |ƒ d S )NT)Zclose_with_result)r   rD   rE   r   Zexec_driver_sqlrF   ©rH   r   rI   r„   rJ   r4   r4   r5   Ú_assert_result_strÒ   s    z'FetchLimitOffsetTest._assert_result_strc                 C   sP   | j j}t|ƒ |jj¡}|  || d¡ddg¡ |  || d¡dddg¡ d S ©Nr   ©r7   r7   r   ©r   r   r   r   ©r   r   r^   )r=   r*   r   rM   rN   r+   rK   Úlimit)rH   r@   r   ru   r4   r4   r5   Útest_simple_limitÖ   s    ýýz&FetchLimitOffsetTest.test_simple_limitc                 C   sL   | j j}t|jjƒ d¡ ¡ }tt|ƒt|ƒƒ ¡  ¡ }|  	||dg¡ d S )Nr7   ra   )
r=   r*   r   rN   r+   rŒ   Zscalar_subqueryr#   ZsubqueryrK   )rH   r@   r   ru   ro   r4   r4   r5   Ú test_limit_render_multiple_timesä   s    ÿýz5FetchLimitOffsetTest.test_limit_render_multiple_timesc                 C   sZ   | j j}|  |t|ƒ |jj¡ d¡ddg¡ |  |t|ƒ |jj¡ d¡dddg¡ d S rˆ   ©r=   r*   rK   r   rM   rN   r+   Úfetch©rH   r@   r   r4   r4   r5   Útest_simple_fetchò   s    ýýz&FetchLimitOffsetTest.test_simple_fetchc                 C   sZ   | j j}|  |t|ƒ |jj¡ d¡dddg¡ |  |t|ƒ |jj¡ d¡ddg¡ d S )Nr   r‹   ©r^   r^   rh   ©rh   r^   r�   r   ©r=   r*   rK   r   rM   rN   r+   Úoffsetr‘   r4   r4   r5   Útest_simple_offset   s    ýýz'FetchLimitOffsetTest.test_simple_offset)r   r   ©r   r7   )r   r   )r   r7   Úcases)Úargnamesc                 C   sl   | j j}|ji d�}dddddg}|D ]@\}}|||| … }|  |t|ƒ |jj¡ |¡ 	|¡|¡ q&d S )N)Zcompiled_cacher‰   rŠ   r‹   r“   r”   )
r=   r*   Zexecution_optionsrK   r   rM   rN   r+   rŒ   r–   )rH   r@   r™   r   Zassert_datarŒ   r–   Úexpectedr4   r4   r5   Útest_simple_limit_offset  s    ýz-FetchLimitOffsetTest.test_simple_limit_offsetc                 C   sf   | j j}|  |t|ƒ |jj¡ d¡ d¡ddg¡ |  |t|ƒ |jj¡ d¡ d¡dddg¡ d S )Nr   r7   rŠ   r‹   r   r“   r”   ©	r=   r*   rK   r   rM   rN   r+   r�   r–   r‘   r4   r4   r5   Útest_simple_fetch_offset#  s    ýýz-FetchLimitOffsetTest.test_simple_fetch_offsetc                 C   s2   | j j}| j|t|ƒ d¡dddddgdd� d S )	Né
   r‰   rŠ   r‹   r“   r”   T©r…   )r=   r*   rK   r   r�   r‘   r4   r4   r5   Útest_fetch_offset_no_order2  s    üz/FetchLimitOffsetTest.test_fetch_offset_no_orderc              	   C   sb   | j j}|  |t|ƒ |jj¡ d¡dddddg¡ |  |t|ƒ |jj¡ d¡ddddg¡ d S )Nr   r‰   rŠ   r‹   r“   r”   r7   r•   r‘   r4   r4   r5   Útest_simple_offset_zero<  s    ý
ýz,FetchLimitOffsetTest.test_simple_offset_zeroc                 C   sX   | j j}t|ƒ |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   r7   Úliteral_bindsT)ÚdialectÚcompile_kwargsrŠ   r‹   N)r=   r*   r   rM   rN   r+   rŒ   r–   Úcompiler   rD   r¥   Ústrr‡   ©rH   r   ru   Úsqlr4   r4   r5   Útest_limit_offset_nobindsK  s     ÿz.FetchLimitOffsetTest.test_limit_offset_nobindsc                 C   sX   | j j}t|ƒ |jj¡ d¡ d¡}|jt	j
jddid�}t|ƒ}|  |ddg¡ dS r£   )r=   r*   r   rM   rN   r+   r�   r–   r§   r   rD   r¥   r¨   r‡   r©   r4   r4   r5   Útest_fetch_offset_nobindsX  s     ÿz.FetchLimitOffsetTest.test_fetch_offset_nobindsc                 C   sr   | j j}| j|t|ƒ |jj¡ tdƒ¡ddgddid� | j|t|ƒ |jj¡ tdƒ¡dddgddid� d S )NÚlr‰   rŠ   r   ©r„   r‹   r   )	r=   r*   rK   r   rM   rN   r+   rŒ   r   r‘   r4   r4   r5   Útest_bound_limite  s    üüz%FetchLimitOffsetTest.test_bound_limitc                 C   sv   | j j}| j|t|ƒ |jj¡ tdƒ¡dddgddid� | j|t|ƒ |jj¡ tdƒ¡ddddgddid� d S )	NÚor‹   r“   r”   r   r®   rŠ   r7   )	r=   r*   rK   r   rM   rN   r+   r–   r   r‘   r4   r4   r5   Útest_bound_offsetv  s    ü
üz&FetchLimitOffsetTest.test_bound_offsetc                 C   sŠ   | j j}| j|t|ƒ |jj¡ tdƒ¡ 	tdƒ¡ddgdddœd� | j|t|ƒ |jj¡ tdƒ¡ 	tdƒ¡dd	d
gdddœd� d S )Nr­   r°   rŠ   r‹   r   r7   )r­   r°   r®   r“   r”   r   )
r=   r*   rK   r   rM   rN   r+   rŒ   r   r–   r‘   r4   r4   r5   Útest_bound_limit_offset‡  s2    ÿþýù
ÿþýùz,FetchLimitOffsetTest.test_bound_limit_offsetc                 C   sŠ   | j j}| j|t|ƒ |jj¡ tdƒ¡ 	tdƒ¡ddgdddœd� | j|t|ƒ |jj¡ tdƒ¡ 	tdƒ¡dd	d
gdddœd� d S )NÚfr°   rŠ   r‹   r   r7   )r³   r°   r®   r“   r”   r   )
r=   r*   rK   r   rM   rN   r+   r�   r   r–   r‘   r4   r4   r5   Útest_bound_fetch_offsetž  s2    ÿþýù
ÿþýùz,FetchLimitOffsetTest.test_bound_fetch_offsetc                 C   s>   | j j}|  |t|ƒ |jj¡ tdƒtdƒ ¡ddg¡ d S )NÚ1Ú2r“   r”   )	r=   r*   rK   r   rM   rN   r+   r–   r   r‘   r4   r4   r5   Útest_expr_offsetµ  s    ÿþûz%FetchLimitOffsetTest.test_expr_offsetc                 C   s@   | j j}|  |t|ƒ |jj¡ tdƒtdƒ ¡dddg¡ d S )Nrµ   r¶   r‰   rŠ   r‹   )	r=   r*   rK   r   rM   rN   r+   rŒ   r   r‘   r4   r4   r5   Útest_expr_limitÀ  s    ÿþûz$FetchLimitOffsetTest.test_expr_limitc                 C   sP   | j j}|  |t|ƒ |jj¡ tdƒtdƒ ¡ 	tdƒtdƒ ¡ddg¡ d S ©Nrµ   r‹   r“   ©
r=   r*   rK   r   rM   rN   r+   rŒ   r   r–   r‘   r4   r4   r5   Útest_expr_limit_offsetË  s    ÿþýúz+FetchLimitOffsetTest.test_expr_limit_offsetc                 C   sP   | j j}|  |t|ƒ |jj¡ tdƒtdƒ ¡ 	tdƒtdƒ ¡ddg¡ d S r¹   )
r=   r*   rK   r   rM   rN   r+   r�   r   r–   r‘   r4   r4   r5   Útest_expr_fetch_offset×  s    ÿþýúz+FetchLimitOffsetTest.test_expr_fetch_offsetc                 C   s~   | j j}|  |t|ƒ |jj¡ d¡ t	dƒt	dƒ ¡ddg¡ |  |t|ƒ |jj¡ d¡ t	dƒt	dƒ ¡dddg¡ d S )Nr   rµ   r‹   r“   r   r”   )
r=   r*   rK   r   rM   rN   r+   rŒ   r–   r   r‘   r4   r4   r5   Útest_simple_limit_expr_offsetä  s.    ÿþýú	ÿþýúz2FetchLimitOffsetTest.test_simple_limit_expr_offsetc                 C   s|   | j j}|  |t|ƒ |jj¡ tdƒtdƒ ¡ 	d¡ddg¡ |  |t|ƒ |jj¡ tdƒtdƒ ¡ 	d¡ddg¡ d S )Nrµ   r   r‹   r“   r7   rŠ   rº   r‘   r4   r4   r5   Útest_expr_limit_simple_offsetù  s.    ÿþýú	ÿþýúz2FetchLimitOffsetTest.test_expr_limit_simple_offsetc                 C   sr   | j j}| j|t|ƒ |jj ¡ ¡jddd�ddgdd� | j|t|ƒ |jj ¡ ¡jddd�dddgdd� d S )	Nr7   T©Ú	with_tiesr“   r”   r    r   r‹   ©	r=   r*   rK   r   rM   rN   rW   rn   r�   r‘   r4   r4   r5   Útest_simple_fetch_ties  s    üüz+FetchLimitOffsetTest.test_simple_fetch_tiesc                 C   s^   | j j}| t|ƒ |jj¡jddd� d¡¡ 	¡ }t
|d dƒ t
t|ƒtdddgƒƒ d S )Nr   Tr¿   r   r‹   r“   r”   ©r=   r*   r<   r   rM   rN   rW   r�   r–   rF   r   rƒ   ©rH   r@   r   Úfar4   r4   r5   Útest_fetch_offset_ties  s    ÿ þýÿz+FetchLimitOffsetTest.test_fetch_offset_tiesc                 C   sl   | j j}|  |t|ƒ |jj¡jddd� d¡ddg¡ |  |t|ƒ |jj¡jddd� d¡dd	g¡ d S )
Nr   Tr¿   r7   rŠ   r‹   r   r“   r”   )	r=   r*   rK   r   rM   rN   rW   r�   r–   r‘   r4   r4   r5   Ú#test_fetch_offset_ties_exact_number,  s2    ÿ þýú	ÿ þýúz8FetchLimitOffsetTest.test_fetch_offset_ties_exact_numberc                 C   s4   | j j}|  |t|ƒ |jj¡jddd�dg¡ d S )Né   T©Úpercentr‰   r�   r‘   r4   r4   r5   Útest_simple_fetch_percentB  s    ýz.FetchLimitOffsetTest.test_simple_fetch_percentc                 C   s<   | j j}|  |t|ƒ |jj¡jddd� d¡ddg¡ d S )Né(   TrÉ   r7   rŠ   r‹   r�   r‘   r4   r4   r5   Útest_fetch_offset_percentK  s    ÿ þýúz.FetchLimitOffsetTest.test_fetch_offset_percentc                 C   s@   | j j}| j|t|ƒ |jj ¡ ¡jdddd�ddgdd� d S )NrÈ   T©rÊ   rÀ   r“   r”   r    rÁ   r‘   r4   r4   r5   Útest_simple_fetch_percent_tiesX  s    
ÿ  þúz3FetchLimitOffsetTest.test_simple_fetch_percent_tiesc                 C   s`   | j j}| t|ƒ |jj¡jdddd� d¡¡ 	¡ }t
|d dƒ t
t|ƒtdddgƒƒ d S )	NrÌ   TrÎ   r   r   r‹   r“   r”   rÃ   rÄ   r4   r4   r5   Útest_fetch_offset_percent_tiese  s    ÿ  þýÿz3FetchLimitOffsetTest.test_fetch_offset_percent_tiesN)r4   F)r4   )0rQ   rR   rS   rT   rU   r6   rA   rK   r‡   r�   rŽ   r   rL   Zfetch_firstr’   r–   r—   Úcombinationsrœ   rž   Zfetch_no_order_byr¡   r¢   r«   r¬   Zbound_limit_offsetr¯   r±   r²   r´   Zsql_expression_limit_offsetr·   r¸   r»   Zfetch_expressionr¼   r½   r¾   Z
fetch_tiesrÂ   Zfetch_offset_with_optionsrÆ   rÇ   Zfetch_percentrË   rÍ   rÏ   rÐ   r4   r4   r4   r5   r}   ­   s”   
	
   ÿ



ü

	















r}   c                   @   sZ   e Zd ZdZdd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S )ÚJoinTestTr4   c              	   C   s0   t j ¡ �}t| ||¡ ¡ |ƒ W 5 Q R X d S rB   rC   r†   r4   r4   r5   rK   w  s    zJoinTest._assert_resultc              	   C   s@   t d|tdtdd�ƒ t d|tdtdd�tdtdƒdd	�ƒ d S )
NÚar+   Tr,   ÚbÚa_idza.idF©Znullable)r   r   r   r   r1   r4   r4   r5   r6   {  s    üzJoinTest.define_tablesc              	   C   sj   |  | jj ¡ ddiddiddiddiddig¡ |  | jj ¡ dddœdddœdddœdddœg¡ d S )Nr+   r7   r   r   r^   rh   )r+   rÕ   )r<   r=   rÓ   r>   rÔ   r?   r4   r4   r5   rA   …  s    
 þ
üþzJoinTest.insert_datac                 C   sN   |   dd¡\}}t||ƒ | |¡¡ |jj|jj¡}|  |ddddg¡ d S ©NrÓ   rÔ   )r7   r7   r7   )r7   r   r7   )r   r^   r   )r   rh   r   ©r=   r   Úselect_fromÚjoinrM   rN   r+   rK   ©rH   rÓ   rÔ   ru   r4   r4   r5   Útest_inner_join_fk–  s    &zJoinTest.test_inner_join_fkc                 C   sn   |   dd¡\}}t||ƒ | |tƒ ¡¡ |jj|jj¡}|  |dd„ t	 
ddddd	gd
dddg¡D ƒ¡ d S )NrÓ   rÔ   c                 S   s    g | ]\\}\}}|||f‘qS r4   r4   )Ú.0rÓ   rÔ   rN   r4   r4   r5   Ú
<listcomp>¨  s   ÿz1JoinTest.test_inner_join_true.<locals>.<listcomp>ra   rb   rc   ©r^   rg   )r7   r7   r˜   )r^   r   )rh   r   )r=   r   rÙ   rÚ   r    rM   rN   r+   rK   Ú	itertoolsÚproductrÛ   r4   r4   r5   Útest_inner_join_true�  s"    
ÿ þÿ
þþþzJoinTest.test_inner_join_truec                 C   sJ   |   dd¡\}}t||ƒ | |tƒ ¡¡ |jj|jj¡}|  |g ¡ d S )NrÓ   rÔ   )	r=   r   rÙ   rÚ   r   rM   rN   r+   rK   rÛ   r4   r4   r5   Útest_inner_join_false±  s    
ÿ þÿzJoinTest.test_inner_join_falsec                 C   sT   |   dd¡\}}t||ƒ | |tƒ ¡¡ |jj|jj¡}|  |dddddg¡ d S )NrÓ   rÔ   )r7   NN)r   NN)r   NN)r^   NN)rh   NN)	r=   r   rÙ   Z	outerjoinr   rM   rN   r+   rK   rÛ   r4   r4   r5   Útest_outer_join_false¼  s"    
ÿ þÿûþzJoinTest.test_outer_join_falsec                 C   sN   |   dd¡\}}t||ƒ | |¡¡ |jj|jj¡}|  |ddddg¡ d S r×   rØ   rÛ   r4   r4   r5   Útest_outer_join_fkÐ  s    &zJoinTest.test_outer_join_fkN)r4   )rQ   rR   rS   rT   rK   rU   r6   rA   rÜ   râ   rã   rä   rå   r4   r4   r4   r5   rÒ   t  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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 r~   r   r1   r4   r4   r5   r6   Û  s    ûz CompoundSelectTest.define_tablesc              
   C   s@   |  | jj ¡ ddddœddddœddddœddddœg¡ d S )Nr7   r   r€   r   r^   rh   r;   r?   r4   r4   r5   rA   å  s    




üþzCompoundSelectTest.insert_datar4   c              	   C   s0   t j ¡ �}t| ||¡ ¡ |ƒ W 5 Q R X d S rB   rC   r†   r4   r4   r5   rK   ñ  s    z!CompoundSelectTest._assert_resultc                 C   s\   | j j}t|ƒ |jjdk¡}t|ƒ |jjdk¡}t||ƒ}|  | |j	j¡ddg¡ d S ©Nr   r   rŠ   r‹   )
r=   r*   r   ÚwhererN   r+   r#   rK   rM   Úselected_columns©rH   r   Ús1Ús2Úu1r4   r4   r5   Útest_plain_unionõ  s    
 ÿz#CompoundSelectTest.test_plain_unionc                 C   sd   | j j}t|ƒ |jjdk¡}t|ƒ |jjdk¡}t||ƒ ¡  ¡ }|  | 	|j
j¡ddg¡ d S rç   )r=   r*   r   rè   rN   r+   r#   ÚaliasrK   rM   ré   rê   r4   r4   r5   Útest_select_from_plain_unionÿ  s     ÿz/CompoundSelectTest.test_select_from_plain_unionc                 C   s‚   | j j}t|ƒ |jjdk¡ d¡ |jj¡}t|ƒ |jjdk¡ d¡ |jj¡}t||ƒ d¡}|  	| |j
j¡ddg¡ d S ©Nr   r7   r   rŠ   r‹   )r=   r*   r   rè   rN   r+   rŒ   rM   r#   rK   ré   rê   r4   r4   r5   Ú&test_limit_offset_selectable_in_unions	  s    && ÿz9CompoundSelectTest.test_limit_offset_selectable_in_unionsc                 C   sv   | j j}t|ƒ |jjdk¡ |jj¡}t|ƒ |jjdk¡ |jj¡}t||ƒ d¡}|  	| |j
j¡ddg¡ d S rç   )r=   r*   r   rè   rN   r+   rM   r#   rŒ   rK   ré   rê   r4   r4   r5   Ú"test_order_by_selectable_in_unions  s       ÿz5CompoundSelectTest.test_order_by_selectable_in_unionsc                 C   sj   | j j}t|ƒ |jjdk¡ ¡ }t|ƒ |jjdk¡ ¡ }t||ƒ d¡}|  	| 
|jj¡ddg¡ d S rç   )r=   r*   r   rè   rN   r+   Údistinctr#   rŒ   rK   rM   ré   rê   r4   r4   r5   Ú"test_distinct_selectable_in_unions   s     ÿz5CompoundSelectTest.test_distinct_selectable_in_unionsc                 C   sŠ   | j j}t|ƒ |jjdk¡ d¡ |jj¡}t|ƒ |jjdk¡ d¡ |jj¡}t||ƒ 	¡ }|  
| ¡  d¡ |jj¡ddg¡ d S rñ   )r=   r*   r   rè   rN   r+   rŒ   rM   r#   rï   rK   rê   r4   r4   r5   Ú&test_limit_offset_in_unions_from_alias*  s    && ÿz9CompoundSelectTest.test_limit_offset_in_unions_from_aliasc                 C   s’   | j j}t|ƒ |jjdk¡ d¡ |jj¡ ¡  ¡ }t|ƒ |jjdk¡ d¡ |jj¡ ¡  ¡ }t	||ƒ d¡}|  
| |jj¡ddg¡ d S rñ   )r=   r*   r   rè   rN   r+   rŒ   rM   rï   r#   rK   ré   rê   r4   r4   r5   Ú.test_limit_offset_aliased_selectable_in_unions6  s,    
ÿþý
ÿ	
ÿþý
ÿ	 ÿzACompoundSelectTest.test_limit_offset_aliased_selectable_in_unionsN)r4   )rQ   rR   rS   rT   rU   r6   rA   rK   rî   rð   r   rL   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÷   r4   r4   r4   r5   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ejjdd„ ƒZejjdd„ ƒZdS )ÚPostCompileParamsTestT)Zstandard_cursor_sqlc              
   C   s6   t d|tdtdd�tdtƒtdtƒtdtdƒƒƒ d S ©	Nr*   r+   Tr,   rW   rX   ÚzrZ   r0   r1   r4   r4   r5   r6   V  s    úz#PostCompileParamsTest.define_tablesc                 C   sH   |  | 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 ©Nr7   r   Úz1)r+   rW   rX   rú   r   Úz2r^   Úz3rh   Úz4r;   r?   r4   r4   r5   rA   a  s    
üþz!PostCompileParamsTest.insert_datac                 C   s<   | j j}t|jjƒ |jjtddd�k¡}|  |di ¡ d S )NrY   T©Úliteral_executezKSELECT some_table.id FROM some_table WHERE some_table.x = __[POSTCOMPILE_q]©	r=   r*   r   rN   r+   rè   rW   r   Úassert_compile©rH   r   ru   r4   r4   r5   Útest_compilem  s    ÿüz"PostCompileParamsTest.test_compilec                 C   sB   | j j}t|jjƒ |jjtdddd�k¡}| j|di dd� d S )NrY   rŸ   Tr   z<SELECT some_table.id FROM some_table WHERE some_table.x = 10)r¤   r  r  r4   r4   r5   Útest_compile_literal_binds{  s    ÿüz0PostCompileParamsTest.test_compile_literal_bindsc              
   C   sˆ   | j j}t|jjƒ |jjtddd�k¡}|  ¡ �.}t	j
 ¡ �}| |tdd�¡ W 5 Q R X W 5 Q R X | tdt	j
jjr|dni ƒ¡ d S )NrY   Tr   rŸ   ©rY   z>SELECT some_table.id 
FROM some_table 
WHERE some_table.x = 10r4   )r=   r*   r   rN   r+   rè   rW   r   Úsql_execution_asserterr   rD   rE   r<   ÚdictÚassert_r
   r¥   Ú
positional©rH   r   ru   ZasserterrJ   r4   r4   r5   Útest_execute‰  s    ÿ
&ýÿz"PostCompileParamsTest.test_executec              
   C   s’   | j j}t|jjƒ |jj tdddd�¡¡}|  	¡ �4}t
j ¡ �}| |tdddgd�¡ W 5 Q R X W 5 Q R X | tdt
jjjr†d	ni ƒ¡ d S )
NrY   T©Ú	expandingr  rh   r�   rj   r  zFSELECT some_table.id 
FROM some_table 
WHERE some_table.x IN (5, 6, 7)r4   )r=   r*   r   rN   r+   rè   rW   r	   r   r  r   rD   rE   r<   r	  r
  r
   r¥   r  r  r4   r4   r5   Ú+test_execute_expanding_plus_literal_executeœ  s    ÿ
,ýÿzAPostCompileParamsTest.test_execute_expanding_plus_literal_executec              
   C   s¬   | j j}t|jjƒ t|jj|jjƒ 	t
dddd�¡¡}|  ¡ �2}tj ¡ �}| |tddgd�¡ W 5 Q R X W 5 Q R X | tdtjjjrŽdnd	 tjjjr d
ni ƒ¡ d S )NrY   Tr  )rh   rŸ   )é   é   r  zbSELECT some_table.id 
FROM some_table 
WHERE (some_table.x, some_table.y) IN (%s(5, 10), (12, 18))úVALUES Ú r4   )r=   r*   r   rN   r+   rè   r!   rW   rX   r	   r   r  r   rD   rE   r<   r	  r
  r
   r¥   Útuple_in_valuesr  r  r4   r4   r5   Ú1test_execute_tuple_expanding_plus_literal_execute¯  s"    ÿÿ
*ýûÿzGPostCompileParamsTest.test_execute_tuple_expanding_plus_literal_executec              
   C   s¬   | j j}t|jjƒ t|jj|jjƒ 	t
dddd�¡¡}|  ¡ �2}tj ¡ �}| |tddgd�¡ W 5 Q R X W 5 Q R X | tdtjjjrŽdnd	 tjjjr d
ni ƒ¡ d S )NrY   Tr  )rh   rü   )r  rþ   r  zfSELECT some_table.id 
FROM some_table 
WHERE (some_table.x, some_table.z) IN (%s(5, 'z1'), (12, 'z3'))r  r  r4   )r=   r*   r   rN   r+   rè   r!   rW   rú   r	   r   r  r   rD   rE   r<   r	  r
  r
   r¥   r  r  r  r4   r4   r5   Ú?test_execute_tuple_expanding_plus_literal_heterogeneous_executeÇ  s"    ÿÿ
*ýûÿzUPostCompileParamsTest.test_execute_tuple_expanding_plus_literal_heterogeneous_executeN)rQ   rR   rS   rT   r|   rU   r6   rA   r  r  r  r  r   rL   Útuple_inr  r  r4   r4   r4   r5   rø   O  s   



rø   c                   @   sr  e Zd ZdZedd„ ƒZedd„ ƒZdDdd„Z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dd„ Zdd„ Zdd„ Zdd„ Z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e
jjd-d.„ ƒZd/d0„ Zd1d2„ Z d3d4„ Z!d5d6„ Z"d7d8„ Z#d9d:„ Z$d;d<„ Z%d=d>„ Z&d?d@„ Z'dAdB„ Z(dCS )EÚExpandingBoundInTestTc              
   C   s6   t d|tdtdd�tdtƒtdtƒtdtdƒƒƒ d S rù   r0   r1   r4   r4   r5   r6   ã  s    úz"ExpandingBoundInTest.define_tablesc                 C   sH   |  | 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 rû   r;   r?   r4   r4   r5   rA   î  s    
üþz ExpandingBoundInTest.insert_datar4   c              	   C   s0   t j ¡ �}t| ||¡ ¡ |ƒ W 5 Q R X d S rB   rC   r†   r4   r4   r5   rK   ú  s    z#ExpandingBoundInTest._assert_resultc                 C   s`   | j j}t|jjƒ |jj tdƒ¡¡ |jj	 tdƒ¡¡ 
|jj¡}| j|g g g dœd� d S )NrY   r[   )rY   r[   r®   )r=   r*   r   rN   r+   rè   rW   r	   r   rX   rM   rK   r  r4   r4   r5   Ú"test_multiple_empty_sets_bindparamþ  s    ÿþýÿz7ExpandingBoundInTest.test_multiple_empty_sets_bindparamc                 C   sN   | j j}t|jjƒ |jj g ¡¡ |jj g ¡¡ 	|jj¡}|  
|g ¡ d S rB   )r=   r*   r   rN   r+   rè   rW   r	   rX   rM   rK   r  r4   r4   r5   Útest_multiple_empty_sets_direct
  s    ÿþýÿz4ExpandingBoundInTest.test_multiple_empty_sets_directc                 C   sT   | j j}t|jjƒ t|jj|jjƒ 	t
dƒ¡¡ |jj¡}| j|g dg id� d S ©NrY   r®   ©r=   r*   r   rN   r+   rè   r!   rW   rú   r	   r   rM   rK   r  r4   r4   r5   Ú)test_empty_heterogeneous_tuples_bindparam  s    ÿþÿz>ExpandingBoundInTest.test_empty_heterogeneous_tuples_bindparamc                    sD   ˆ j j‰‡ ‡fdd„}|g g ƒ |dddgdddgƒ |g g ƒ d S )	Nc                    s@   t ˆjjƒ tˆjjˆjjƒ | ¡¡ ˆjj¡}ˆ  	||¡ d S rB   )
r   rN   r+   rè   r!   rW   rú   r	   rM   rK   ©Úvalr›   ru   ©rH   r   r4   r5   Úgo$  s    ÿþÿzGExpandingBoundInTest.test_empty_heterogeneous_tuples_direct.<locals>.go©r   rý   ©r   rþ   ©r^   rÿ   rb   rc   rß   ©r=   r*   ©rH   r"  r4   r!  r5   Ú&test_empty_heterogeneous_tuples_direct   s
    
z;ExpandingBoundInTest.test_empty_heterogeneous_tuples_directc                 C   sT   | j j}t|jjƒ t|jj|jjƒ 	t
dƒ¡¡ |jj¡}| j|g dg id� d S r  ©r=   r*   r   rN   r+   rè   r!   rW   rX   r	   r   rM   rK   r  r4   r4   r5   Ú'test_empty_homogeneous_tuples_bindparam0  s    ÿþÿz<ExpandingBoundInTest.test_empty_homogeneous_tuples_bindparamc                    sD   ˆ j j‰‡ ‡fdd„}|g g ƒ |dddgdddgƒ |g g ƒ d S )	Nc                    s@   t ˆjjƒ tˆjjˆjjƒ | ¡¡ ˆjj¡}ˆ  	||¡ d S rB   )
r   rN   r+   rè   r!   rW   rX   r	   rM   rK   r  r!  r4   r5   r"  >  s    ÿþÿzEExpandingBoundInTest.test_empty_homogeneous_tuples_direct.<locals>.go)r7   r   ©r   r   ©r   r^   ra   rb   rc   r&  r'  r4   r!  r5   Ú$test_empty_homogeneous_tuples_direct:  s
    
z9ExpandingBoundInTest.test_empty_homogeneous_tuples_directc                 C   sV   | j j}t|jjƒ |jj tdƒ¡¡ 	|jj¡}| j
|dddgddddgid� d S )	NrY   rb   rc   rß   r   r   r^   r®   ©r=   r*   r   rN   r+   rè   rW   r	   r   rM   rK   r  r4   r4   r5   Útest_bound_in_scalar_bindparamJ  s    ÿþÿz3ExpandingBoundInTest.test_bound_in_scalar_bindparamc                 C   sJ   | j j}t|jjƒ |jj dddg¡¡ |jj¡}|  	|dddg¡ d S )Nr   r   r^   rb   rc   rß   ©
r=   r*   r   rN   r+   rè   rW   r	   rM   rK   r  r4   r4   r5   Útest_bound_in_scalar_directS  s    ÿþÿz0ExpandingBoundInTest.test_bound_in_scalar_directc                 C   sV   | j j}t|jjƒ |jj ddg¡¡ |jj g ¡¡ 	|jj¡}|  
|ddg¡ d S )Nr   r   rb   rc   ©r=   r*   r   rN   r+   rè   rW   r	   Únot_inrM   rK   r  r4   r4   r5   Ú!test_nonempty_in_plus_empty_notin\  s    ÿþýÿz6ExpandingBoundInTest.test_nonempty_in_plus_empty_notinc                 C   sR   | j j}t|jjƒ |jj g ¡¡ |jj ddg¡¡ 	|jj¡}|  
|g ¡ d S )Nr   r   r2  r  r4   r4   r5   Ú!test_empty_in_plus_notempty_notinf  s    ÿþýÿz6ExpandingBoundInTest.test_empty_in_plus_notempty_notinc                 C   s<   t dƒ tdtdd�¡}| j|dddgddd	d
gid� dS )z†test related to #7292.

        as a type is given to the bound param, there is no ambiguity
        to the type of element.

        ú3select id FROM some_table WHERE z IN :q ORDER BY idrY   T©Útype_r  rb   rc   rß   rý   rþ   rÿ   r®   N)r   Ú
bindparamsr   r   rK   ©rH   ru   r4   r4   r5   Útest_typed_str_inp  s    ÿþýz&ExpandingBoundInTest.test_typed_str_inc                 C   s:   t dƒ tddd�¡}| j|dddgddd	d
gid� dS )zÂtest related to #7292.

        for untyped expression, we look at the types of elements.
        Test for Sequence to detect tuple in.  but not strings or bytes!
        as always....

        r6  rY   T©r  rb   rc   rß   rý   rþ   rÿ   r®   N©r   r9  r   rK   r:  r4   r4   r5   Útest_untyped_str_in�  s    	ÿ
þýz(ExpandingBoundInTest.test_untyped_str_inc                 C   s`   | j j}t|jjƒ t|jj|jjƒ 	t
dƒ¡¡ |jj¡}| j|dddgddddgid� d S )	NrY   rb   rc   rß   r+  r,  ©r^   rh   r®   r)  r  r4   r4   r5   Ú!test_bound_in_two_tuple_bindparam“  s    ÿþÿ  ÿz6ExpandingBoundInTest.test_bound_in_two_tuple_bindparamc                 C   sT   | j j}t|jjƒ t|jj|jjƒ 	dddg¡¡ 
|jj¡}|  |dddg¡ d S )Nr+  r,  r?  rb   rc   rß   )r=   r*   r   rN   r+   rè   r!   rW   rX   r	   rM   rK   r  r4   r4   r5   Útest_bound_in_two_tuple_directŸ  s    ÿþÿz3ExpandingBoundInTest.test_bound_in_two_tuple_directc                 C   s`   | j j}t|jjƒ t|jj|jjƒ 	t
dƒ¡¡ |jj¡}| j|dddgddddgid� d S )	NrY   rb   rc   rß   r#  r$  r%  r®   r  r  r4   r4   r5   Ú/test_bound_in_heterogeneous_two_tuple_bindparam©  s    ÿþÿýzDExpandingBoundInTest.test_bound_in_heterogeneous_two_tuple_bindparamc                 C   sT   | j j}t|jjƒ t|jj|jjƒ 	dddg¡¡ 
|jj¡}|  |dddg¡ d S )Nr#  r$  r%  rb   rc   rß   )r=   r*   r   rN   r+   rè   r!   rW   rú   r	   rM   rK   r  r4   r4   r5   Ú,test_bound_in_heterogeneous_two_tuple_direct·  s    ÿþúÿ	þzAExpandingBoundInTest.test_bound_in_heterogeneous_two_tuple_directc                 C   s:   t dƒ tddd�¡}| j|dddgddd	d
gid� d S )Nú8select id FROM some_table WHERE (x, z) IN :q ORDER BY idrY   Tr<  rb   rc   rß   r#  r$  r%  r®   r=  r:  r4   r4   r5   Ú4test_bound_in_heterogeneous_two_tuple_text_bindparamÈ  s    ÿ
þýzIExpandingBoundInTest.test_bound_in_heterogeneous_two_tuple_text_bindparamc              	   C   sj   G dd„ dt jƒ}tdƒ tdttƒ tƒ ƒdd�¡}| j|ddd	gd|d
dƒ|ddƒ|ddƒgid� d S )Nc                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
zhExpandingBoundInTest.test_bound_in_heterogeneous_two_tuple_typed_bindparam_non_tuple.<locals>.LikeATuplec                 W   s
   || _ d S rB   ©Ú_data©rH   r.   r4   r4   r5   Ú__init__Ø  s    zqExpandingBoundInTest.test_bound_in_heterogeneous_two_tuple_typed_bindparam_non_tuple.<locals>.LikeATuple.__init__c                 S   s
   t | jƒS rB   ©ÚiterrG  ©rH   r4   r4   r5   Ú__iter__Û  s    zqExpandingBoundInTest.test_bound_in_heterogeneous_two_tuple_typed_bindparam_non_tuple.<locals>.LikeATuple.__iter__c                 S   s
   | j | S rB   rF  ©rH   Úidxr4   r4   r5   Ú__getitem__Þ  s    ztExpandingBoundInTest.test_bound_in_heterogeneous_two_tuple_typed_bindparam_non_tuple.<locals>.LikeATuple.__getitem__c                 S   s
   t | jƒS rB   ©r‚   rG  rL  r4   r4   r5   Ú__len__á  s    zpExpandingBoundInTest.test_bound_in_heterogeneous_two_tuple_typed_bindparam_non_tuple.<locals>.LikeATuple.__len__N©rQ   rR   rS   rI  rM  rP  rR  r4   r4   r4   r5   Ú
LikeATuple×  s   rT  rD  rY   Tr7  rb   rc   rß   r   rý   r   rþ   r^   rÿ   r®   )	r(   ÚSequencer   r9  r   r"   r   r   rK   ©rH   rT  ru   r4   r4   r5   Ú?test_bound_in_heterogeneous_two_tuple_typed_bindparam_non_tupleÕ  s(    ÿ  ÿýýÿýzTExpandingBoundInTest.test_bound_in_heterogeneous_two_tuple_typed_bindparam_non_tuplec              	   C   s^   G dd„ dt jƒ}tdƒ tddd�¡}| j|ddd	gd|d
dƒ|ddƒ|ddƒgid� d S )Nc                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
zgExpandingBoundInTest.test_bound_in_heterogeneous_two_tuple_text_bindparam_non_tuple.<locals>.LikeATuplec                 W   s
   || _ d S rB   rF  rH  r4   r4   r5   rI  ý  s    zpExpandingBoundInTest.test_bound_in_heterogeneous_two_tuple_text_bindparam_non_tuple.<locals>.LikeATuple.__init__c                 S   s
   t | jƒS rB   rJ  rL  r4   r4   r5   rM     s    zpExpandingBoundInTest.test_bound_in_heterogeneous_two_tuple_text_bindparam_non_tuple.<locals>.LikeATuple.__iter__c                 S   s
   | j | S rB   rF  rN  r4   r4   r5   rP    s    zsExpandingBoundInTest.test_bound_in_heterogeneous_two_tuple_text_bindparam_non_tuple.<locals>.LikeATuple.__getitem__c                 S   s
   t | jƒS rB   rQ  rL  r4   r4   r5   rR    s    zoExpandingBoundInTest.test_bound_in_heterogeneous_two_tuple_text_bindparam_non_tuple.<locals>.LikeATuple.__len__NrS  r4   r4   r4   r5   rT  ü  s   rT  rD  rY   Tr<  rb   rc   rß   r   rý   r   rþ   r^   rÿ   r®   )r(   rU  r   r9  r   rK   rV  r4   r4   r5   Ú>test_bound_in_heterogeneous_two_tuple_text_bindparam_non_tuple÷  s     ÿ
þýÿýzSExpandingBoundInTest.test_bound_in_heterogeneous_two_tuple_text_bindparam_non_tuplec                 C   sJ   | j j}t|jjƒ |jj tdƒ¡¡ 	|jj¡}| j
|g dg id� d S r  r.  r  r4   r4   r5   Ú(test_empty_set_against_integer_bindparam  s    ÿþÿz=ExpandingBoundInTest.test_empty_set_against_integer_bindparamc                 C   s>   | j j}t|jjƒ |jj g ¡¡ |jj¡}|  	|g ¡ d S rB   r0  r  r4   r4   r5   Ú%test_empty_set_against_integer_direct!  s    &z:ExpandingBoundInTest.test_empty_set_against_integer_directc                 C   sR   | j j}t|jjƒ |jj tdƒ¡¡ 	|jj¡}| j
|ddddgdg id� d S ©NrY   ra   rb   rc   rß   r®   )r=   r*   r   rN   r+   rè   rW   r3  r   rM   rK   r  r4   r4   r5   Ú1test_empty_set_against_integer_negation_bindparam&  s    ÿþÿzFExpandingBoundInTest.test_empty_set_against_integer_negation_bindparamc                 C   sF   | j j}t|jjƒ |jj g ¡¡ |jj¡}|  	|ddddg¡ d S ©Nra   rb   rc   rß   )
r=   r*   r   rN   r+   rè   rW   r3  rM   rK   r  r4   r4   r5   Ú.test_empty_set_against_integer_negation_direct/  s    $ÿzCExpandingBoundInTest.test_empty_set_against_integer_negation_directc                 C   sJ   | j j}t|jjƒ |jj tdƒ¡¡ 	|jj¡}| j
|g dg id� d S r  )r=   r*   r   rN   r+   rè   rú   r	   r   rM   rK   r  r4   r4   r5   Ú'test_empty_set_against_string_bindparam6  s    ÿþÿz<ExpandingBoundInTest.test_empty_set_against_string_bindparamc                 C   s>   | j j}t|jjƒ |jj g ¡¡ |jj¡}|  	|g ¡ d S rB   )
r=   r*   r   rN   r+   rè   rú   r	   rM   rK   r  r4   r4   r5   Ú$test_empty_set_against_string_direct?  s    &z9ExpandingBoundInTest.test_empty_set_against_string_directc                 C   sR   | j j}t|jjƒ |jj tdƒ¡¡ 	|jj¡}| j
|ddddgdg id� d S r[  )r=   r*   r   rN   r+   rè   rú   r3  r   rM   rK   r  r4   r4   r5   Ú0test_empty_set_against_string_negation_bindparamD  s    ÿþÿzEExpandingBoundInTest.test_empty_set_against_string_negation_bindparamc                 C   sF   | j j}t|jjƒ |jj g ¡¡ |jj¡}|  	|ddddg¡ d S r]  )
r=   r*   r   rN   r+   rè   rú   r3  rM   rK   r  r4   r4   r5   Ú-test_empty_set_against_string_negation_directM  s    $ÿzBExpandingBoundInTest.test_empty_set_against_string_negation_directc                 C   sD   t ttƒ  tddd�¡tƒ ftƒ d�ƒ}t| |¡ ¡ d dƒ d S )NÚfoor4   )Úvalue©Zelse_r   ©Fr   )	r   r   r   r	   r   r    r   r<   Úfetchone©rH   r@   ru   r4   r4   r5   Ú)test_null_in_empty_set_is_false_bindparamT  s    þûÿ	z>ExpandingBoundInTest.test_null_in_empty_set_is_false_bindparamc                 C   s<   t ttƒ  g ¡tƒ ftƒ d�ƒ}t| |¡ ¡ d dƒ d S )Nre  r   rf  )r   r   r   r	   r    r   r<   rg  rh  r4   r4   r5   Ú&test_null_in_empty_set_is_false_direct`  s    
þûÿ	z;ExpandingBoundInTest.test_null_in_empty_set_is_false_directN)r4   ))rQ   rR   rS   rT   rU   r6   rA   rK   r  r  r   rL   Ztuple_in_w_emptyr  r(  r*  r-  r/  r1  r4  r5  r;  r>  r  r@  rA  rB  rC  rE  rW  rX  rY  rZ  r\  r^  r_  r`  ra  rb  ri  rj  r4   r4   r4   r5   r  à  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ejjd&d'„ ƒZejjd(d)„ ƒZejje d*d+d,d-d.hfd/d+d,d-d.d0hfd1d+d,d-d.d0hfd2d3hfd4ee d+d5ƒƒfd6ee d+d5ƒƒfd7eƒ f¡d8d9„ ƒƒZ!dS ):ÚLikeFunctionsTestTÚonceNc                 C   s&   t d|tdtdd�tdtdƒƒƒ d S )Nr*   r+   Tr,   r.   rZ   r0   r1   r4   r4   r5   r6   s  s    üzLikeFunctionsTest.define_tablesc                 C   sp   |  | 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œdd dœg¡ d S )Nr7   Zabcdefgr9   r   zab/cdefgr   zab%cdefgr^   Zab_cdefgrh   zabcde/fgr�   zabcde%fgrj   zab#cdefgé   Zab9cdefgé	   zabcde#fgrŸ   Zabcd9fgé   r;   r?   r4   r4   r5   rA   |  s    
õþzLikeFunctionsTest.insert_datac              	   C   sN   | j j}tj ¡ �(}dd„ | t|jjƒ 	|¡¡D ƒ}W 5 Q R X t
||ƒ d S )Nc                 S   s   h | ]
\}|’qS r4   r4   )rÝ   rd  r4   r4   r5   Ú	<setcomp>“  s   ÿz*LikeFunctionsTest._test.<locals>.<setcomp>)r=   r*   r   rD   rE   r<   r   rN   r+   rè   r   )rH   rt   r›   r*   rJ   Úrowsr4   r4   r5   Ú_test�  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%cr7   r   r   r^   rh   r�   rj   rm  rn  rŸ   ©r=   r*   rN   r.   rr  Ú
startswith©rH   Úcolr4   r4   r5   Útest_startswith_unescapedš  s    z+LikeFunctionsTest.test_startswith_unescapedc                 C   s(   | j jjj}|  |jddd�dh¡ d S )Nrs  T©Ú
autoescaper   rt  rv  r4   r4   r5   Útest_startswith_autoescapež  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'r7   r   r   r^   rh   r�   rj   rm  rn  rŸ   )r=   r*   rN   r.   rr  ru  r   rv  r4   r4   r5   Ú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ú#©Úescaperj   rt  rv  r4   r4   r5   Útest_startswith_escape©  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 )Nrs  Tr}  ©rz  r  r   zab#crj   rt  rv  r4   r4   r5   Ú!test_startswith_autoescape_escape­  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%fgr7   r   r   r^   rh   r�   rj   rm  rn  ©r=   r*   rN   r.   rr  Úendswithrv  r4   r4   r5   Útest_endswith_unescaped²  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'r7   r   r   r^   rh   r�   rj   rm  rn  )r=   r*   rN   r.   rr  r…  r   rv  r4   r4   r5   Útest_endswith_sqlexpr¶  s
     ÿz'LikeFunctionsTest.test_endswith_sqlexprc                 C   s(   | j jjj}|  |jddd�dh¡ d S )Nrƒ  Try  r�   r„  rv  r4   r4   r5   Útest_endswith_autoescape¼  s    z*LikeFunctionsTest.test_endswith_autoescapec                 C   s(   | j jjj}|  |jddd�dh¡ d S )Nze##fgr}  r~  rn  r„  rv  r4   r4   r5   Ú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#fgrn  r„  rv  r4   r4   r5   Ú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%cder7   r   r   r^   rh   r�   rj   rm  rn  ©r=   r*   rN   r.   rr  Úcontainsrv  r4   r4   r5   Útest_contains_unescapedÉ  s    z)LikeFunctionsTest.test_contains_unescapedc                 C   s(   | j jjj}|  |jddd�dh¡ d S )Nr‹  Try  r   rŒ  rv  r4   r4   r5   Ú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~  rj   rŒ  rv  r4   r4   r5   Ú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#cdrj   rŒ  rv  r4   r4   r5   Útest_contains_autoescape_escapeÕ  s    z1LikeFunctionsTest.test_contains_autoescape_escapec              	   C   s0   | j jjj}|  | d¡ ddddddh¡ d S )Núa.cder   r   r^   rj   rm  rŸ   ©r=   r*   rN   r.   rr  Úregexp_matchrv  r4   r4   r5   Útest_not_regexp_matchÚ  s    z'LikeFunctionsTest.test_not_regexp_matchc                 C   s2   | j jjj}|  | dd¡ d¡ddddh¡ d S )Nr’  ZFOOr7   rh   r�   rn  )r=   r*   rN   r.   rr  Úregexp_replacer�  rv  r4   r4   r5   Útest_regexp_replaceß  s
     
ÿz%LikeFunctionsTest.test_regexp_replacer’  r7   rh   r�   rn  ÚabcrŸ   z^abcZ9cderm  z^aro  z(b|c)z^(b|c)c                 C   s"   | j jjj}|  | |¡|¡ d S rB   r“  )rH   r   r›   rw  r4   r4   r5   Útest_regexp_matchæ  s    z#LikeFunctionsTest.test_regexp_match)"rQ   rR   rS   rT   Úrun_insertsÚrun_deletesrU   r6   rA   rr  rx  r{  r|  r€  r‚  r†  r‡  rˆ  r‰  rŠ  rŽ  r�  r�  r‘  r   rL   r”  r•  r–  r—  rÑ   rƒ   Úranger™  r4   r4   r4   r5   rk  m  sJ   



ù	rk  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   r1   r4   r4   r5   r6   ù  s    úz ComputedColumnTest.define_tablesc                 C   s(   |  | jj ¡ dddœdddœg¡ d S )Nr7   rŸ   )r+   rŸ  é*   )r<   r=   rž  r>   r?   r4   r4   r5   rA     s    
þzComputedColumnTest.insert_datac              	   C   sV   t j ¡ �B}| ttdƒƒ | jj¡ 	| jjj
j¡¡ ¡ }t|ddgƒ W 5 Q R X d S )NÚ*)r7   rŸ   r/   rÌ   )rŸ   r¢  éä  é¨   )r   rD   rE   r<   r   r   rÙ   r=   rž  rM   rN   r+   rF   r   ©rH   rJ   Úresr4   r4   r5   Útest_select_all  s    ÿ
þÿz"ComputedColumnTest.test_select_allc              	   C   sd   t j ¡ �P}| t| jjjj| jjjj	ƒ 
| jj¡ | jjjj¡¡ ¡ }t|ddgƒ W 5 Q R X d S )N)r/   rÌ   )r¤  r¥  )r   rD   rE   r<   r   r=   rž  rN   r   r¡  rÙ   rM   r+   rF   r   r¦  r4   r4   r5   Útest_select_columns  s    
 
ÿý
üÿz&ComputedColumnTest.test_select_columnsN)
rQ   rR   rS   rT   r|   rU   r6   rA   r¨  r©  r4   r4   r4   r5   r�  õ  s   


	r�  c                   @   sT   e Zd ZdZdZdZdZedd„ ƒZedd„ ƒZ	dd	„ Z
d
d„ Zejjdd„ ƒZdS )ÚIdentityColumnTestT)Zidentity_columnsrl  c                 C   sd   t d|tdttddddd�dd�tdtdƒƒƒ t d	|tdttd
dddd�dd�tdtdƒƒƒ d S )NÚtbl_ar+   Tr¢  )ÚalwaysÚstartZ
nominvalueZ
nomaxvaluer,   rn   r/   Útbl_béûÿÿÿr   iüÿÿ)Ú	incrementr­  ZminvalueZmaxvalue©r   r   r   r   r   r1   r4   r4   r5   r6   &  s6       ÿúõü÷z IdentityColumnTest.define_tablesc                 C   s`   |  | jj ¡ ddiddig¡ |  | jj ¡ ddiddig¡ |  | jj ¡ dddœg¡ d S )Nrn   rÓ   rÔ   r¢  rN   ©r+   rn   )r<   r=   r«  r>   r®  r?   r4   r4   r5   rA   A  s    
þ
þ

þzIdentityColumnTest.insert_datac                 C   s~   |  ttdƒƒ | jj¡ | jjjj¡¡ 	¡ }t
|ddgƒ |  ttdƒƒ | jj¡ | jjjj¡¡ 	¡ }t
|dddgƒ d S )Nr£  )r¢  rÓ   )é+   rÔ   )r¯  rÔ   )r   rÓ   )r¢  rN   )r<   r   r   rÙ   r=   r«  rM   rN   r+   rF   r   r®  ©rH   r@   r§  r4   r4   r5   r¨  P  s     ÿ
þÿÿ
þÿz"IdentityColumnTest.test_select_allc                 C   s:   |  t| jjjjƒ | jjjj¡¡ ¡ }t|ddgƒ d S )N)r¢  )r³  )	r<   r   r=   r«  rN   r+   rM   rF   r   r´  r4   r4   r5   r©  _  s    ÿz&IdentityColumnTest.test_select_columnsc                    s    ‡ ‡fdd„}t ttf|ƒ d S )Nc                      s    ˆ   ˆjj ¡ dddœg¡ d S )NéÈ   rÓ   r²  )r<   r=   r«  r>   r4   ©r@   rH   r4   r5   Úfnh  s    

þz7IdentityColumnTest.test_insert_always_error.<locals>.fn)r   r&   r'   )rH   r@   r·  r4   r¶  r5   Útest_insert_always_errorf  s    z+IdentityColumnTest.test_insert_always_errorN)rQ   rR   rS   rT   r|   rš  r›  rU   r6   rA   r¨  r©  r   rL   Zidentity_columns_standardr¸  r4   r4   r4   r5   rª     s   

rª  c                   @   s(   e Zd ZdZdZedd„ ƒZdd„ ZdS )ÚIdentityAutoincrementTestT)Zautoincrement_without_sequencec              
   C   s,   t d|tdttƒ ddd�tdtdƒƒƒ d S )NÚtblr+   T)r-   Zautoincrementrn   r/   r±  r1   r4   r4   r5   r6   u  s    ûöz'IdentityAutoincrementTest.define_tablesc                 C   s<   |  | jj ¡ ddi¡}|  | jj ¡ ¡ ¡ }t|dƒ d S )Nrn   Úrow)r7   r»  )r<   r=   rº  r>   r   Úfirstr   r´  r4   r4   r5   Ú test_autoincrement_with_identity„  s    z:IdentityAutoincrementTest.test_autoincrement_with_identityN)rQ   rR   rS   rT   r|   rU   r6   r½  r4   r4   r4   r5   r¹  q  s
   
r¹  c                   @   s8   e Zd ZdZedd„ ƒZedd„ ƒZdd„ Zdd	„ Zd
S )Ú
ExistsTestTc                 C   s&   t d|tdtdd�tdtdƒƒƒ d S )NÚstuffr+   Tr,   r.   rZ   r0   r1   r4   r4   r5   r6   �  s    üzExistsTest.define_tablesc              	   C   s8   |  | jj ¡ dddœdddœdddœdddœg¡ d S )Nr7   ú	some datar9   r   r   r^   zsome other data)r<   r=   r¿  r>   r?   r4   r4   r5   rA   –  s    
üþzExistsTest.insert_datac              	   C   s@   | j j}t| ttdƒƒ tƒ  |jj	dk¡¡¡ 
¡ dgƒ d S )Nr7   rÀ  ra   ©r=   r¿  r   r<   r   r   rè   r   rN   r.   rF   ©rH   r@   r¿  r4   r4   r5   Útest_select_exists¢  s    ÿÿúzExistsTest.test_select_existsc              	   C   s>   | j j}t| ttdƒƒ tƒ  |jj	dk¡¡¡ 
¡ g ƒ d S )Nr7   zno datarÁ  rÂ  r4   r4   r5   Útest_select_exists_false­  s    ÿÿúz#ExistsTest.test_select_exists_falseN)	rQ   rR   rS   rT   rU   r6   rA   rÃ  rÄ  r4   r4   r4   r5   r¾  Š  s   

r¾  c                   @   s&   e Zd ZdZe ejj¡dd„ ƒZdS )ÚDistinctOnTestTc              	   C   sB   t dƒ tdƒ¡ tdƒ¡}t d¡� |  |d¡ W 5 Q R X d S )Nr£  rY   rc  z:DISTINCT ON is currently supported only by the PostgreSQL zSELECT DISTINCT * FROM foo)r   rô   r   rÙ   r   r   Zexpect_deprecatedr  )rH   Zstmr4   r4   r5   Útest_distinct_on¼  s
    ÿzDistinctOnTest.test_distinct_onN)	rQ   rR   rS   rT   r   Zfails_ifrL   Zsupports_distinct_onrÆ  r4   r4   r4   r5   rÅ  ¹  s   rÅ  c                	   @   s@   e Zd ZdZdZedd„ ƒZejddddd	d
dd�dd„ ƒZ	dS )ÚIsOrIsNotDistinctFromTestT)Zsupports_is_distinct_fromc              
   C   s2   t d|tdtdd�tdtdd�tdtdd�ƒ d S )NÚis_distinct_testr+   Tr,   Úcol_arÖ   Úcol_br   r1   r4   r4   r5   r6   É  s    ûz'IsOrIsNotDistinctFromTest.define_tables)Zboth_int_differentr   r7   r7   )Zboth_int_samer7   r7   r   )Zone_null_firstNr7   r7   )Zone_null_secondr   Nr7   )Z	both_nullNNr   Ziaaaz3col_a_value, col_b_value, expected_row_count_for_is)Zid_rš   c                 C   sž   | j j}| | ¡ d||dœg¡ | | ¡  |jj |jj	¡¡¡ 
¡ }tt|ƒ|ƒ |dkrbdnd}| | ¡  |jj |jj	¡¡¡ 
¡ }tt|ƒ|ƒ d S )Nr7   )r+   rÉ  rÊ  r   )r=   rÈ  r<   r>   r   rè   rN   rÉ  Zis_distinct_fromrÊ  rF   r   r‚   Zis_not_distinct_from)rH   Zcol_a_valueZcol_b_valueZexpected_row_count_for_isr@   rº  rI   Zexpected_row_count_for_is_notr4   r4   r5   Útest_is_or_is_not_distinct_fromÓ  s*    þÿþÿÿþz9IsOrIsNotDistinctFromTest.test_is_or_is_not_distinct_fromN)
rQ   rR   rS   rT   r|   rU   r6   r   rÑ   rË  r4   r4   r4   r5   rÇ  Å  s   
	ù	rÇ  )<rà   r  r   r   r   r   Z
assertionsr   r   r	   Z	assertsqlr
   Zschemar   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   Úexcr&   r'   r(   Z
TablesTestr)   rV   ZTestBaserx   r}   rÒ   ræ   rø   r  rk  r�  rª  r¹  r¾  rÅ  rÇ  r4   r4   r4   r5   Ú<module>   s€   &M   Jdw
  ÿ     	+Q/