U
    ÌZjŸ6  ã                   @   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 G dd„ dejƒZG dd„ dejƒZG dd„ dejejƒZdS )é    Né   )Úengines)Úfixtures)Úeq_)Úrequirements)ÚColumn)ÚTableé   )ÚDateTime)Úfunc)ÚInteger)Úselect)Úsql)ÚString)Útesting)Útext)Úutilc                   @   s^   e 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dd„ ƒZdd„ ZdS )ÚRowFetchTestTc                 C   sD   t d|tdtdd�tdtdƒƒƒ t d|tdtdd�tdtƒƒ d S )	NÚplain_pkÚidT©Zprimary_keyÚdataé2   Ú	has_datesÚtoday)r   r   r   r   r
   ©ÚclsÚmetadata© r   úh/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/sqlalchemy/testing/suite/test_results.pyÚdefine_tables   s    üüzRowFetchTest.define_tablesc                 C   s\   |  | jj ¡ dddœdddœdddœg¡ |  | jj ¡ dt dd	d
d
dd¡dœg¡ d S )Né   Úd1)r   r   r   Zd2r	   Zd3éÖ  é   é   r   )r   r   )ÚexecuteÚtablesr   Úinsertr   Údatetime)r   Ú
connectionr   r   r   Úinsert_data&   s    
ýþ	
þzRowFetchTest.insert_datac                 C   s@   |  | jj ¡  | jjjj¡¡ ¡ }t|jdƒ t|j	dƒ d S ©Nr!   r"   )
r&   r'   r   r   Úorder_byÚcr   Úfirstr   r   ©Úselfr*   Úrowr   r   r   Útest_via_attr6   s
    ÿzRowFetchTest.test_via_attrc                 C   sH   |  | jj ¡  | jjjj¡¡ ¡ }t|j	d dƒ t|j	d dƒ d S )Nr   r!   r   r"   )
r&   r'   r   r   r-   r.   r   r/   r   Ú_mappingr0   r   r   r   Útest_via_string>   s
    ÿzRowFetchTest.test_via_stringc                 C   sD   |  | jj ¡  | jjjj¡¡ ¡ }t|d dƒ t|d dƒ d S )Nr   r!   r"   )	r&   r'   r   r   r-   r.   r   r/   r   r0   r   r   r   Útest_via_intF   s
    ÿzRowFetchTest.test_via_intc                 C   sX   |  | jj ¡  | jjjj¡¡ ¡ }t|j	| jjjj dƒ t|j	| jjjj
 dƒ d S r,   )r&   r'   r   r   r-   r.   r   r/   r   r4   r   r0   r   r   r   Útest_via_col_objectN   s
    ÿz RowFetchTest.test_via_col_objectc                 C   s\   |  t| jjjj| jjjj d¡ƒ | jjjj¡¡}| 	¡ }t
| ¡ ddgƒ t
|dƒ d S )Nr   )r"   r"   )r&   r   r'   r   r.   r   Úlabelr-   r   r/   r   Úkeys)r1   r*   Úresultr2   r   r   r   Útest_row_with_dupe_namesV   s    
þ
ýÿz%RowFetchTest.test_row_with_dupe_namesc              
   C   s`   | j j}t| d¡jjƒ ¡ }t|jj| d¡ƒ}| 	|¡ 
¡ }t|jt dddddd¡ƒ dS )zýtest that a scalar select as a column is returned as such
        and that type conversion works OK.

        (this is half a SQLAlchemy Core test and half to catch database
        backends that may have unusual behavior with scalar selects.)

        ÚxÚ	somelabelr#   r$   r%   r   N)r'   r   r   Úaliasr.   r   Zscalar_subqueryr   r8   r&   r/   r   r=   r)   )r1   r*   Z	datetableÚsÚs2r2   r   r   r   Útest_row_w_scalar_selectb   s
    z%RowFetchTest.test_row_w_scalar_selectN)Ú__name__Ú
__module__Ú__qualname__Ú__backend__Úclassmethodr    r+   r3   r5   r6   r7   r   Z%duplicate_names_in_cursor_descriptionr;   rA   r   r   r   r   r      s   


r   c                   @   s<   e Zd ZdZdZdZedd„ ƒZdd„ Zdd	„ Z	d
d„ Z
dS )ÚPercentSchemaNamesTestz¡tests using percent signs, spaces in table and column names.

    This didn't work for PostgreSQL / MySQL drivers for a long time
    but is now supported.

    )Zpercent_schema_namesTc                 C   s@   t d|tdtƒtdtƒƒ| j_t dt d¡t d¡¡| j_d S )Nzpercent%tableúpercent%úspaces % more spaces)	r   r   r   r'   Úpercent_tabler   ÚtableÚcolumnÚlightweight_percent_tabler   r   r   r   r    ~   s    üýz$PercentSchemaNamesTest.define_tablesc                 C   sP   | j j}dddœdddœdddœdddœfD ]}| | ¡ |¡ q,|  |¡ d S ©Nr$   r%   )rH   rI   é   é   é	   é
   ©r'   rJ   r&   r(   Ú_assert_table)r1   r*   rJ   Úparamsr   r   r   Útest_single_roundtripŒ   s    üz,PercentSchemaNamesTest.test_single_roundtripc                 C   sT   | j j}| | ¡ dddœ¡ | | ¡ dddœdddœdddœg¡ |  |¡ d S rN   rS   )r1   r*   rJ   r   r   r   Útest_executemany_roundtrip—   s     ÿýþz1PercentSchemaNamesTest.test_executemany_roundtripc                 C   sL  | j j}| j j}|| ¡ || ¡ fD ]Ø}tt| | ¡  |j	d ¡¡ƒddddgƒ tt| | ¡  
|j	d  ddg¡¡ |j	d ¡¡ƒddgƒ | | ¡  |j	d ¡¡ ¡ }t|jd d	ƒ t|jd d
ƒ t|j|j	d  d	ƒ t|j|j	d  d
ƒ q$| | ¡  |j	d di¡¡ tt| | ¡  |j	d ¡¡ƒddddgƒ d S )NrH   )r$   r%   )rO   rP   )rQ   rR   )rP   rQ   rI   rQ   rR   r$   r%   é   )r$   rX   )rO   rX   )rQ   rX   )rP   rX   )r'   rJ   rM   r>   r   Úlistr&   r   r-   r.   ÚwhereZin_r/   r4   ÚupdateÚvalues)r1   ÚconnrJ   rM   rK   r2   r   r   r   rT   ¦   s^    üÿ
üÿþÿÿøÿÿÿÿÿÿ
øz$PercentSchemaNamesTest._assert_tableN)rB   rC   rD   Ú__doc__Ú__requires__rE   rF   r    rV   rW   rT   r   r   r   r   rG   r   s   
rG   c                   @   s  e Zd ZdZdZdd„ Zdd„ Zejddde	d	ƒdfd
de
dƒdfdde	d	ƒdfdde
dƒjdd�dfdde
dƒjdd�dfdde
dƒ ¡ dfdddde d¡fdde	dƒdfdde	dƒjdd�dfddd�dd„ ƒZdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'S )(ÚServerSideCursorsTest)Úserver_side_cursorsTc                 C   sÀ   | j jjdkrt|jƒS | j jjdkr<tdƒjj}t||ƒS | j jjdkrP|j	S | j jjdkrttdƒjj}t||ƒS | j jjdkrŠ|j
 S | j jjdkrž|j	S | j jjd	kr¸t|d
dƒS dS d S )NZpsycopg2Zpymysqlzpymysql.cursors)ZaiomysqlZasyncmyZmysqldbzMySQLdb.cursorsZmariadbconnector)ZasyncpgZ	aiosqliteZpg8000Úserver_sideF)ÚengineÚdialectZdriverÚboolÚnameÚ
__import__ZcursorsZSSCursorÚ
isinstancerb   ÚbufferedÚgetattr)r1   ÚcursorZsscursorr   r   r   Ú_is_server_sideå   s"    


z%ServerSideCursorsTest._is_server_sidec              	   C   sF   |r.t  d¡� tjd|id�| _W 5 Q R X ntjd|id�| _| jS )Nz­The create_engine.server_side_cursors parameter is deprecated and will be removed in a future release.  Please use the Connection.execution_options.stream_results parameter.ra   )Úoptions)r   Zexpect_deprecatedr   Ztesting_enginerc   )r1   ra   r   r   r   Ú_fixtureû   s    ÿÿÿzServerSideCursorsTest._fixture)Zglobal_stringTúselect 1TZglobal_textro   Zglobal_exprr!   Zglobal_off_explicitFZstmt_option©Zstream_resultsZstmt_option_disabledZfor_update_exprZfor_update_stringzSELECT 1 FOR UPDATEZsqliteZ
text_no_ssz	select 42Ztext_ss_optionZiaaaz*engine_ss_arg, statement, cursor_ss_status)Zid_Úargnamesc              	   C   s^   |   |¡}| ¡ �B}t|tjƒr,| |¡}n
| |¡}t|  |j	¡|ƒ | 
¡  W 5 Q R X d S )N)rn   Úbeginrh   r   Ústring_typesÚexec_driver_sqlr&   r   rl   rk   Úclose)r1   Zengine_ss_argZ	statementZcursor_ss_statusrc   r]   r:   r   r   r   Útest_ss_cursor_status  s    '


z+ServerSideCursorsTest.test_ss_cursor_statusc              	   C   sD   |   d¡}| ¡ �(}|jdd� d¡}|  |j¡s6t‚W 5 Q R X d S )NFTrp   ro   )rn   ÚconnectÚexecution_optionsrt   rl   rk   ÚAssertionError)r1   rc   r]   r:   r   r   r   Útest_conn_option<  s    

ÿþz&ServerSideCursorsTest.test_conn_optionc              	   C   sT   |   d¡}tdƒjdd�}| ¡ �(}|jdd� |¡}|  |j¡rFt‚W 5 Q R X d S )NFr!   Trp   )rn   r   rx   rw   r&   rl   rk   ry   )r1   rc   r?   r]   r:   r   r   r   Ú&test_stmt_enabled_conn_option_disabledF  s
    

z<ServerSideCursorsTest.test_stmt_enabled_conn_option_disabledc              	   C   s¬   |   d¡}tt d¡ d¡ƒjdd� ¡ }| ¡ �,}| | ¡ ¡}|  	|j
¡rRt‚| ¡  W 5 Q R X tdƒ |¡}| ¡ �(}| |¡}|  	|j
¡r–t‚| ¡  W 5 Q R X d S )NFÚ1r<   Trp   r!   )rn   r   r   Zliteral_columnr8   rx   Zsubqueryrr   r&   rl   rk   ry   ru   Úselect_from)r1   rc   Ús1r]   r:   r@   r   r   r   Útest_aliases_and_ssP  s    
ÿÿ


z)ServerSideCursorsTest.test_aliases_and_ssc              	   C   s*  | j }|  d¡}td|tdtdd�tdtdƒƒƒ}| ¡ �æ}|j|dd� | | 	¡ t
dd	�¡ | | 	¡ t
d
d	�¡ t| | ¡  |jj¡¡ ¡ ddgƒ | | ¡  |jjdk¡j|jjd d	�¡ t| | ¡  |jj¡¡ ¡ ddgƒ | | ¡ ¡ t| tt d¡ƒ |¡¡dƒ W 5 Q R X d S )NTÚ
test_tabler   r   r   r   ©Z
checkfirstÚdata1©r   Údata2)r!   r‚   )r   r„   r   z updated)r   zdata2 updatedÚ*r   )r   rn   r   r   r   r   rr   Úcreater&   r(   Údictr   r   r-   r.   r   Úfetchallr[   rZ   r\   r   ÚdeleteZscalarr   Úcountr}   )r1   r   Úmdrc   r€   r*   r   r   r   Útest_roundtrip_fetchalld  sL    
ü
ÿü
ÿ
þÿÿüÿüz-ServerSideCursorsTest.test_roundtrip_fetchallc              	   C   sî   | j }|  d¡}td|tdtdd�tdtdƒƒƒ}| ¡ �ª}|j|dd� | | 	¡ dd	„ t
d
dƒD ƒ¡ | | ¡  |jj¡¡}t| d¡dd	„ t
d
dƒD ƒƒ t| d¡dd	„ t
ddƒD ƒƒ t| ¡ dd	„ t
ddƒD ƒƒ W 5 Q R X d S )NTr€   r   r   r   r   r�   c                 S   s   g | ]}t d | d�‘qS )údata%drƒ   )r‡   ©Ú.0Úir   r   r   Ú
<listcomp>›  s     zBServerSideCursorsTest.test_roundtrip_fetchmany.<locals>.<listcomp>r!   é   r$   c                 S   s   g | ]}|d | f‘qS ©r�   r   rŽ   r   r   r   r‘   ¤  s     é   rR   c                 S   s   g | ]}|d | f‘qS r“   r   rŽ   r   r   r   r‘   ¨  s     é   c                 S   s   g | ]}|d | f‘qS r“   r   rŽ   r   r   r   r‘   ª  s     )r   rn   r   r   r   r   rr   r†   r&   r(   Úranger   r-   r.   r   r   Z	fetchmanyrˆ   )r1   r   r‹   rc   r€   r*   r:   r   r   r   Útest_roundtrip_fetchmanyŒ  s4    
ü
þÿþþz.ServerSideCursorsTest.test_roundtrip_fetchmanyN)rB   rC   rD   r_   rE   rl   rn   r   Úcombinationsr   r   rx   Zwith_for_updateZskip_ifrv   rz   r{   r   rŒ   r—   r   r   r   r   r`   Ý   sR   üüûüÞ$


(r`   )r)   Ú r   r   Z
assertionsr   Úconfigr   Zschemar   r   r
   r   r   r   r   r   r   r   r   Z
TablesTestr   rG   ZTestBaseZAssertsExecutionResultsr`   r   r   r   r   Ú<module>   s*   ^k
 ÿ