o
    ŠågÜ  ã                   @   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 G dd„ dejƒZdS )é    )Ú	bindparam)ÚColumn)ÚInteger)ÚMetaData)Úselect)ÚString)ÚTable)Útesting)Útext)Úeq_)Úfixturesc                   @   sà   e Zd ZdZdZdZedd„ ƒZedd„ ƒZdd	„ Z	e
 d
g d¢¡e
 dddg¡dd„ ƒƒZdd„ Zdd„ Ze
 dddg¡e
 dde
jjfde
jjfg¡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 )%ÚRowCountTestztest rowcount functionality)Úsane_rowcountTc              	   C   s4   t d|tdtddd�tdtdƒƒtdtd	ƒƒƒ d S )
NÚ	employeesÚemployee_idFT©ÚautoincrementÚprimary_keyÚnameé2   Ú
departmenté   )r   r   r   r   )ÚclsÚmetadata© r   úb/var/www/html/flaskapp/venv/lib/python3.10/site-packages/sqlalchemy/testing/suite/test_rowcount.pyÚdefine_tables   s   üözRowCountTest.define_tablesc                 C   s8   g d¢ | _ }| jj}| | ¡ dd„ t|ƒD ƒ¡ d S )N)	)ÚAngelaÚA)ÚAndrewr   )ÚAnandr   )ÚBobÚB)ÚBobetter"   )ÚBuffyr"   )ÚCharlieÚC)ÚCynthiar&   )ÚChrisr&   c                 S   s    g | ]\}\}}|||d œ‘qS )©r   r   r   r   )Ú.0ÚiÚnÚdr   r   r   Ú
<listcomp><   s    

ÿÿz,RowCountTest.insert_data.<locals>.<listcomp>)ÚdataÚtablesr   ÚexecuteÚinsertÚ	enumerate)r   Ú
connectionr/   Úemployees_tabler   r   r   Úinsert_data+   s   þþzRowCountTest.insert_datac                 C   sB   | j j}t|jj|jjƒ |jj¡}| |¡ 	¡ }t
|| jƒ d S )N)r0   r   r   Úcr   r   Úorder_byr   r1   Úfetchallr   r/   )Úselfr4   r5   ÚsÚrowsr   r   r   Ú
test_basicB   s   ÿ
þzRowCountTest.test_basicÚ	statement)ÚupdateÚdeleter2   r   Úclose_firstFc              	   C   sò   | j j}|jj}|jr| | ¡  |dk¡ddi¡}nO|jr.| | ¡  |dk¡ddi¡}n<|jrI| | ¡ ddddœdd	ddœd
dddœg¡}n!|j	rft	|jj
|jjƒ |jjdk¡}| |¡}| ¡  n| ¡  |rp| ¡  |jdv swJ ‚d S )Nr&   r   ÚZé   znone 1ÚXr)   é   znone 2é   znone 3)éÿÿÿÿé   )r0   r   r7   r   r?   r1   Úwherer@   r2   r   r   ÚallÚfailÚcloseÚrowcount)r:   r4   r>   rA   r5   r   Úrr;   r   r   r   Ú$test_non_rowcount_scenarios_no_raiseK   s@   þþ


ýþÿþ

z1RowCountTest.test_non_rowcount_scenarios_no_raisec                 C   s@   | j j}|jj}| | ¡  |dk¡ddi¡}|jdksJ ‚d S )Nr&   r   rB   rH   )r0   r   r7   r   r1   r?   rI   rM   ©r:   r4   r5   r   rN   r   r   r   Útest_update_rowcount1v   s   þz"RowCountTest.test_update_rowcount1c                 C   s>   | j j}|jj}| | ¡  |dk¡ddi¡}t|jdƒ d S )Nr&   r   rH   )	r0   r   r7   r   r1   r?   rI   r   rM   rP   r   r   r   Útest_update_rowcount2�   s   þz"RowCountTest.test_update_rowcount2Úimplicit_returningÚdmlr?   r@   c              	   C   sº   |r| j j}ntdtƒ tdtddd�tdtdƒƒtdtd	ƒƒdd
�}|jj}|j	r=| 	¡  
|dk¡j|jjd d� ¡ }n|jrL| ¡  
|dk¡ ¡ }n| ¡  | |¡}t|jdƒ dS )zØnote this test should succeed for all RETURNING backends
        as of 2.0.  In
        Idf28379f8705e403a3c6a937f6a798a042ef2540 we changed rowcount to use
        len(rows) when we have implicit returning

        r   r   FTr   r   r   r   r   )rS   r&   rB   )r   rH   N)r0   r   r   r   r   r   r   r7   r   r?   rI   ÚvaluesÚreturn_defaultsr@   rK   r1   r   rM   )r:   r4   rS   rT   r5   r   ÚstmtrN   r   r   r   Ú+test_update_delete_rowcount_return_defaults�   s>   
üõ
þü
ý
z8RowCountTest.test_update_delete_rowcount_return_defaultsc                 C   s   |  d¡}t|jdƒ d S ©Nz8update employees set department='Z' where department='C'rH   )Úexec_driver_sqlr   rM   ©r:   r4   Úresultr   r   r   Útest_raw_sql_rowcountÅ   s   ÿz"RowCountTest.test_raw_sql_rowcountc                 C   s   |  tdƒ¡}t|jdƒ d S rY   )r1   r
   r   rM   r[   r   r   r   Útest_text_rowcountÌ   s   ÿzRowCountTest.test_text_rowcountc                 C   s8   | j j}|jj}| | ¡  |dk¡¡}t|jdƒ d S )Nr&   rH   )	r0   r   r7   r   r1   r@   rI   r   rM   rP   r   r   r   Útest_delete_rowcountÓ   s   ÿz!RowCountTest.test_delete_rowcountc                 C   sX   | j j}| ¡  |jjtdƒk¡jdd�}| |ddiddiddig¡}t	|j
dƒ d S )NÚemp_namer&   )r   r!   r'   Únonexistenté   )r0   r   r?   rI   r7   r   r   rU   r1   r   rM   ©r:   r4   r5   rW   rN   r   r   r   Útest_multi_update_rowcountÝ   s   þÿýþ	z'RowCountTest.test_multi_update_rowcountc                 C   sP   | j j}| ¡  |jjtdƒk¡}| |ddiddiddig¡}t|j	dƒ d S )Nr`   r!   r'   ra   rb   )
r0   r   r@   rI   r7   r   r   r1   r   rM   rc   r   r   r   Útest_multi_delete_rowcountñ   s   ÿýþ	z'RowCountTest.test_multi_delete_rowcountN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__requires__Ú__backend__Úclassmethodr   r6   r=   r	   Ú	variationrO   rQ   rR   ÚrequiresÚupdate_returningÚdelete_returningrX   r]   r^   r_   Úsane_multi_rowcountrd   re   r   r   r   r   r      s:    

	)

þþ0

r   N)Ú
sqlalchemyr   r   r   r   r   r   r   r	   r
   Úsqlalchemy.testingr   r   Ú
TablesTestr   r   r   r   r   Ú<module>   s   