o
    [h*                     @   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   )config)engines)fixtures)eq_)requirements)Column)Table   )DateTime)func)Integer)select)sql)String)testing)textc                   @   sV   e Zd ZdZedd Ze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   /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/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   Zd2r
   Zd3        r   )r   r   )executetablesr   insertr   datetime)r   
connectionr   r   r   insert_data&   s   
	
zRowFetchTest.insert_datac                 C   sF   t j| jj | jjjj	 }t
|d d t
|d d d S )Nr   r!   r   r"   r   dbr&   r'   r   r   order_bycr   firstr   selfrowr   r   r   test_via_string6      zRowFetchTest.test_via_stringc                 C   sF   t j| jj | jjjj	 }t
|d d t
|d d d S )Nr   r!   r"   r,   r1   r   r   r   test_via_int>   r5   zRowFetchTest.test_via_intc                 C   sV   t j| jj | jjjj	 }t
|| jjjj d t
|| jjjj d d S )Nr!   r"   )r   r-   r&   r'   r   r   r.   r/   r   r0   r   r   r1   r   r   r   test_via_col_objectF   s   z RowFetchTest.test_via_col_objectc                 C   s`   t jt| jjjj| jjjjdg	| jjjj
}| }t| ddg t|d d S )Nr   )r"   r"   )r   r-   r&   r   r'   r   r/   r   labelr.   r   r0   r   keys)r2   resultr3   r   r   r   test_row_with_dupe_namesN   s   
z%RowFetchTest.test_row_with_dupe_namesc              
   C   sh   | j j}t|djjg }t|jj|dg}t	j
| }t|d 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.)

        xZ	somelabelr#   r$   r%   r   N)r'   r   r   aliasr/   r   Z	as_scalarr   r8   r   r-   r&   r0   r   r)   )r2   Z	datetabless2r3   r   r   r   test_row_w_scalar_select\   s
   "z%RowFetchTest.test_row_w_scalar_selectN)__name__
__module____qualname____backend__classmethodr    r+   r4   r6   r7   r   Z%duplicate_names_in_cursor_descriptionr;   r@   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 is a very fringe use case, doesn't work for MySQL
    or PostgreSQL.  the requirement, "percent_schema_names",
    is marked "skip" by default.

    )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    y   s   z$PercentSchemaNamesTest.define_tablesc                 C   sP   | j j}ddddddddddddfD ]}tj| | q|   d S Nr$   r%   )rG   rH         	   
   r'   rI   r   r-   r&   r(   _assert_table)r2   rI   paramsr   r   r   test_single_roundtrip   s   z,PercentSchemaNamesTest.test_single_roundtripc                 C   sV   | j j}tj| ddd tj| dddddddddg |   d S rM   rR   )r2   rI   r   r   r   test_executemany_roundtrip   s   z1PercentSchemaNamesTest.test_executemany_roundtripc                 C   sF  | j j}| j j}|| || fD ]i}tttj|	 
|jd g d tttj|	 |jd ddg
|jd ddg tj|	 
|jd  }t|d d t|d d	 t||jd  d t||jd  d	 qtj| |jd d
i tttj|	 
|jd g d d S )NrG   ))r$   r%   )rN   rO   rP   rQ   rO   rP   rH   rP   rQ   rW   rX   r$   r%      ))r$   rY   )rN   rY   )rP   rY   )rO   rY   )r'   rI   rL   r=   r   listr   r-   r&   r   r.   r/   wherein_r0   updatevalues)r2   rI   rL   rJ   r3   r   r   r   rS      sb   	z$PercentSchemaNamesTest._assert_tableN)rA   rB   rC   __doc____requires__rD   rE   r    rU   rV   rS   r   r   r   r   rF   l   s    
rF   c                   @   s   e Zd ZdZdZdd Zdd Zdd Zej	d	d
de
ddfddedgdfdde
ddfddedgjdddfddedgjdddfddedg dfd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ejd#d$ Zd%S )&ServerSideCursorsTest)server_side_cursorsTc                 C   sd   | 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r0tdjj}t||S dS )NZpsycopg2Zpymysqlzpymysql.cursorsZmysqldbzMySQLdb.cursorsF)	enginedialectZdriverboolname
__import__ZcursorsZSSCursor
isinstance)r2   cursorZsscursorr   r   r   _is_server_side   s   


z%ServerSideCursorsTest._is_server_sidec                 C   s   t jd|id| _| jS )Nrb   )options)r   Ztesting_enginerc   )r2   rb   r   r   r   _fixture   s   zServerSideCursorsTest._fixturec                 C   s   t j  | j  d S N)r   Ztesting_reaperZ	close_allrc   Zdispose)r2   r   r   r   tearDown   s   
zServerSideCursorsTest.tearDown)Zglobal_stringTselect 1TZglobal_textro   Zglobal_exprr!   Zglobal_off_explicitFZstmt_optionZstream_resultsZstmt_option_disabledZfor_update_expr)Zfor_update_stringTzSELECT 1 FOR UPDATETZ
text_no_ssz	select 42Ztext_ss_optionZiaaaz*engine_ss_arg, statement, cursor_ss_status)Zid_argnamesc                 C   s\   |  |}| }||}t| |j| |  W d    d S 1 s'w   Y  d S rm   )rl   beginr&   r   rj   ri   close)r2   Zengine_ss_argZ	statementZcursor_ss_statusrc   connr:   r   r   r   test_ss_cursor_status   s   
 


"z+ServerSideCursorsTest.test_ss_cursor_statusc                 C   s4   |  d}| jddd}| |jsJ d S )NFTrp   ro   )rl   connectexecution_optionsr&   rj   ri   )r2   rc   r:   r   r   r   test_conn_option  s   
z&ServerSideCursorsTest.test_conn_optionc                 C   sF   |  d}tdgjdd}| jdd|}| |jr!J d S )NFr!   Trp   )rl   r   rw   rv   r&   rj   ri   )r2   rc   r>   r:   r   r   r   &test_stmt_enabled_conn_option_disabled)  s
   
z<ServerSideCursorsTest.test_stmt_enabled_conn_option_disabledc                 C   s   |  d}tdgjdd }| }||}| |js"J |  W d    n1 s0w   Y  tdg|d}| }||}| |jrNJ |  W d    d S 1 s]w   Y  d S )NFr!   Trp   )Zfrom_obj)	rl   r   rw   r=   rr   r&   rj   ri   rs   )r2   rc   s1rt   r:   r?   r   r   r   test_aliases_and_ss4  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 | jdd	 | j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g| d 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   rl   r	   r   r   r   creater(   r&   r   r   r.   r/   r   Zfetchallr]   r[   r^   r   deleter   countselect_fromZscalar)r2   mdr|   r   r   r   test_roundtripD  s2   

$z$ServerSideCursorsTest.test_roundtripN)rA   rB   rC   r`   rD   rj   rl   rn   r   combinationsr   r   rw   Zwith_for_updateru   rx   ry   r{   Zprovide_metadatar   r   r   r   r   ra      sL    
	ra   )r)    r   r   r   Z
assertionsr   r   Zschemar   r	   r   r   r   r   r   r   r   r   Z
TablesTestr   rF   ZTestBaseZAssertsExecutionResultsra   r   r   r   r   <module>   s*    X
n