o
    ŠågB  ã                   @   sö   d dl Z 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 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©Útextc                   @   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)Úprimary_keyÚdataé2   Ú	has_datesÚtoday)r   r   r   r   r
   ©ÚclsÚmetadata© r   úa/var/www/html/flaskapp/venv/lib/python3.10/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   Úd2r	   Ú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_attr>   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/   r0   r   r1   r   Ú_mappingr2   r   r   r   Útest_via_stringF   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/   r0   r   r1   r   r2   r   r   r   Útest_via_intN   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/   r0   r   r1   r   r6   r   r2   r   r   r   Útest_via_col_objectV   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   r0   r   Úlabelr/   r   r1   r   Úkeys)r3   r,   Úresultr4   r   r   r   Útest_row_with_dupe_names^   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   Úaliasr0   r   Úscalar_subqueryr   r:   r(   r1   r   r?   r+   )r3   r,   Ú	datetableÚsÚs2r4   r   r   r   Útest_row_w_scalar_selectj   s
    z%RowFetchTest.test_row_w_scalar_selectN)Ú__name__Ú
__module__Ú__qualname__Ú__backend__Úclassmethodr    r-   r5   r7   r8   r9   r   Ú%duplicate_names_in_cursor_descriptionr=   rE   r   r   r   r   r      s    


r   c                   @   sJ   e Zd ZdZdZdZedd„ ƒZdd„ Zdd	„ Z	e
j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.

    )Ú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'   ©rN   rO   é   é   é	   é
   ©r)   rP   r(   r*   Ú_assert_table)r3   r,   rP   Ú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 rT   rZ   )r3   r,   rP   r   r   r   Útest_executemany_roundtripŸ   s   ÿýþz1PercentSchemaNamesTest.test_executemany_roundtripc                 C   sz   | j j}| | ¡ dddœ¡ | | ¡  |jd |jd ¡dddœdd	dœdddœg¡}t| ¡ g d
¢ƒ |  |¡ d S )Nr&   r'   rU   rN   rO   rV   rW   rX   rY   )©rV   rW   ©rX   rY   ©rW   rX   )	r)   rP   r(   r*   Ú	returningr0   r   Úallr[   )r3   r,   rP   r<   r   r   r   Ú$test_executemany_returning_roundtrip®   s    ÿþýûz;PercentSchemaNamesTest.test_executemany_returning_roundtripc                 C   sD  | j j}| j j}|| ¡ || ¡ fD ]j}tt| | ¡  |j	d ¡¡ƒg d¢ƒ 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 ¡¡ƒg d¢ƒ d S )NrN   ))r&   r'   r_   r`   ra   rO   rX   rY   r`   ra   r&   r'   é   ))r&   re   )rV   re   )rX   re   )rW   re   )r)   rP   rS   r@   r   Úlistr(   r   r/   r0   ÚwhereÚin_r1   r6   ÚupdateÚvalues)r3   ÚconnrP   rS   rQ   r4   r   r   r   r[   Â   s^   üÿüýÿøÿþÿÿÿÿÿøz$PercentSchemaNamesTest._assert_tableN)rF   rG   rH   Ú__doc__Ú__requires__rI   rJ   r    r]   r^   r   Úinsert_executemany_returningrd   r[   r   r   r   r   rL   z   s    

rL   c                   @   s  e Zd ZdZdZdd„ Zdd„ Zdd„ Zej	d	dd
d„ dfdddd„ dfdde
dƒdfddd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„ de ddg¡fdddd„ dfdd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v r(|j	S | j jjdkr:tdƒjj}t||ƒS | j jjdkrE|j
 S | j jjdv rO|j	S | j jjd	kr\t|d
dƒS | j jjdkrktt|ddƒƒS | j jjdkrxt|d
dƒS dS )NÚpsycopg2Úpymysqlzpymysql.cursors)ÚaiomysqlÚasyncmyÚaioodbcÚmysqldbzMySQLdb.cursorsÚmariadbconnector)ÚasyncpgÚ	aiosqliteÚpg8000Úserver_sideFÚpsycopgÚnameÚoracledb)ÚengineÚdialectÚdriverÚboolr}   Ú
__import__ÚcursorsÚSSCursorÚ
isinstancer{   ÚbufferedÚgetattr)r3   ÚcursorÚsscursorr   r   r   Ú_is_server_side   s*   


z%ServerSideCursorsTest._is_server_sidec                 C   sb   |r%t  d¡� tjd|id�| _W d   ƒ | jS 1 sw   Y  | jS 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.rp   )Úoptions)r   Úexpect_deprecatedr   Útesting_enginer   )r3   rp   r   r   r   Ú_fixture  s   ÿ
ÿ
úóýÿzServerSideCursorsTest._fixturec                 C   s   t  dt j¡ dd„ |¡S )NzSELECT (\d+)c                 S   s   t tt|  d¡ƒƒ tj¡ƒS )Nr!   )Ústrr   ÚintÚgroupÚcompiler   Údb)Úmr   r   r   Ú<lambda>-  s    z1ServerSideCursorsTest.stringify.<locals>.<lambda>)Úrer“   ÚIÚsub)r3   Ústr_r   r   r   Ú	stringify+  s   ÿzServerSideCursorsTest.stringifyÚglobal_stringc                 C   ó   | dƒS ©Núselect 1r   ©r›   r   r   r   r–   1  ó    zServerSideCursorsTest.<lambda>Úglobal_textc                 C   ó   t | dƒƒS rž   r   r    r   r   r   r–   5  ó    Úglobal_exprr!   Úglobal_off_explicitFc                 C   r£   rž   r   r    r   r   r   r–   <  r¤   Ústmt_option©Ústream_resultsÚstmt_option_disabledÚfor_update_exprÚfor_update_stringc                 C   r�   )NzSELECT 1 FOR UPDATEr   r    r   r   r   r–   P  r¡   ÚsqliteÚmssqlÚ
text_no_ssc                 C   r£   )Nú	select 42r   r    r   r   r   r–   W  r¤   Útext_ss_optionc                 C   s   t | dƒƒjdd�S )Nr°   Tr¨   )r   Úexecution_optionsr    r   r   r   r–   ]  s    ÿÚiaaaz*engine_ss_arg, statement, cursor_ss_status)Úid_Úargnamesc                 C   sŠ   |   |¡}| ¡ �2}t|ƒrtj|| jd�}t|tƒr!| |¡}n| 	|¡}t
|  |j¡|ƒ | ¡  W d   ƒ d S 1 s>w   Y  d S )Nr    )r�   ÚbeginÚcallabler   Úresolve_lambdar›   r†   r�   Úexec_driver_sqlr(   r   r‹   r‰   Úclose)r3   Úengine_ss_argÚ	statementÚcursor_ss_statusr   rk   r<   r   r   r   Útest_ss_cursor_status0  s   
8
ÿ


"õz+ServerSideCursorsTest.test_ss_cursor_statusc                 C   sh   |   d¡}| ¡ �!}|jdd� |  d¡¡}|  |j¡sJ ‚| ¡  W d   ƒ d S 1 s-w   Y  d S )NFTr¨   rŸ   )r�   Úconnectr²   r¹   r›   r‹   r‰   rº   )r3   r   rk   r<   r   r   r   Útest_conn_optionv  s   

ÿþ
"íz&ServerSideCursorsTest.test_conn_optionc                 C   sj   |   d¡}tdƒjdd�}| ¡ �}|jdd� |¡}|  |j¡r#J ‚W d   ƒ d S 1 s.w   Y  d S )NFr!   Tr¨   )r�   r   r²   r¿   r(   r‹   r‰   )r3   r   rC   rk   r<   r   r   r   Ú&test_stmt_enabled_conn_option_disabledŽ  s   

"ýz<ServerSideCursorsTest.test_stmt_enabled_conn_option_disabledc                 C   sÖ   |   d¡}tt d¡ d¡ƒjdd� ¡ }| ¡ �}| | ¡ ¡}|  	|j
¡r)J ‚| ¡  W d   ƒ n1 s7w   Y  tdƒ |¡}| ¡ �}| |¡}|  	|j
¡rUJ ‚| ¡  W d   ƒ d S 1 sdw   Y  d S )NFÚ1r>   Tr¨   r!   )r�   r   r   Úliteral_columnr:   r²   Úsubqueryr¶   r(   r‹   r‰   rº   Úselect_from)r3   r   Ús1rk   r<   rD   r   r   r   Útest_aliases_and_ss˜  s"   
ÿý

ý


"ýz)ServerSideCursorsTest.test_aliases_and_ssc              	   C   sB  | j }|  d¡}td|tdtddd�tdtdƒƒƒ}| ¡ �y}|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 d   ƒ d S 1 sšw   Y  d S )NTÚ
test_tabler   ©r   Útest_needs_autoincrementr   r   ©Ú
checkfirstÚdata1©r   Údata2)r!   rÍ   )r   rÏ   r   z updated)r   zdata2 updatedÚ*r   )r   r�   r   r   r   r   r¶   Úcreater(   r*   Údictr   r   r/   r0   r   Úfetchallri   rg   rj   r   ÚdeleteÚscalarr   ÚcountrÅ   )r3   r   Úmdr   rÈ   r,   r   r   r   Útest_roundtrip_fetchall¬  sT   
ÿú
	ÿüþÿÿüÿü"êz-ServerSideCursorsTest.test_roundtrip_fetchallc              	   C   s  | j }|  d¡}td|tdtd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 d   ƒ d S 1 s|w   Y  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   ó   g | ]}|d | f‘qS ©rÙ   r   rÚ   r   r   r   rÝ   ð  ó    é   rY   c                 S   rß   rà   r   rÚ   r   r   r   rÝ   ô  rá   é   c                 S   rß   rà   r   rÚ   r   r   r   rÝ   ö  rá   )r   r�   r   r   r   r   r¶   rÑ   r(   r*   Úranger   r/   r0   r   r   Ú	fetchmanyrÓ   )r3   r   r×   r   rÈ   r,   r<   r   r   r   Útest_roundtrip_fetchmanyÖ  s:   
ÿú
	þÿþþ "íz.ServerSideCursorsTest.test_roundtrip_fetchmanyN)rF   rG   rH   rm   rI   r‹   r�   r›   r   Úcombinationsr   r²   Úwith_for_updateÚskip_ifr¾   rÀ   rÁ   rÇ   rØ   ræ   r   r   r   r   ro   ù   sn    üüüüûüúÍ
5
*ro   )r+   r—   Ú r   r   Ú
assertionsr   Úconfigr   Úschemar   r   r
   r   r   r   r   r   r   r   Ú
TablesTestr   rL   ÚTestBaseÚAssertsExecutionResultsro   r   r   r   r   Ú<module>   s*   ^
ÿ