o
    hB                     @   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data2   	has_datestoday)r   r   r   r   r
   clsmetadata r   y/var/www/html/construction_image-detection-poc/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 )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   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 )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.

    )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krUd	t|j vS | j jjd
v r_|j	S | j jjdkrlt|ddS | j jjdkr{tt|ddS | j jjdkrt|ddS dS )Npsycopg2pymysqlzpymysql.cursors)aiomysqlasyncmyaioodbcmysqldbzMySQLdb.cursorsmariadbconnectormysqlconnectorbuffered)asyncpg	aiosqlitepg8000server_sideFpsycopgnameoracledb)enginedialectdriverboolr   
__import__cursorsSSCursor
isinstancer}   ry   typerF   lower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 )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.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   3      zServerSideCursorsTest.<lambda>global_textc                 C      t | dS r   r   r   r   r   r   r   7      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   R  r   sqlitemssql
text_no_ssc                 C   r   )N	select 42r   r   r   r   r   r   Y  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_status2  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_optionx  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 sw   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*   ^
