U
    cc6                     @   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data2   	has_datestoday)r   r   r   r   r
   clsmetadata r   I/tmp/pip-unpacked-wheel-8u86ls_i/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 )ztest 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 )PercentSchemaNamesTestztests 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rt|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   Z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 )NzThe 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_textrn   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)rm   beginrh   r   string_typesexec_driver_sqlr&   r   rk   rj   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 )NFTro   rn   )rm   connectexecution_optionsrs   rk   rj   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!   Tro   )rm   r   rw   rv   r&   rk   rj   rx   )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
rt|  W 5 Q R X d S )NF1r<   Tro   r!   )rm   r   r   Zliteral_columnr8   rw   Zsubqueryrq   r&   rk   rj   rx   rt   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   rm   r   r   r   r   rq   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   rm   r   r   r   r   rq   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   rk   rm   r   combinationsr   r   rw   Zwith_for_updateZskip_ifru   ry   rz   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
 