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 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%Z&G d&d' d'ej"Z'G d(d) d)ej%Z(G d*d+ d+ej"Z)G d,d- d-ej"Z*G d.d/ d/ej+e*Z,G d0d1 d1ej"Z-G d2d3 d3ej%Z.dS )4    N   )testing   )assert_raises)config)engines)eq_)fixtures)is_not_none)is_true)mock)ne_)provide_metadata)expect_raises)expect_raises_message)requirements) set_default_schema_on_connection)Column)Table   )	bindparam)dialects)event)exc)Integer)literal_column)select)String)Compiled)inspect_getfullargspecc                   @   s   e Zd ZdZdd ZdS )PingTestTc                 C   sF   t j }tt jj|jj W d    d S 1 sw   Y  d S N)r   dbconnectr   dialectdo_ping
connectiondbapi_connection)selfconn r*   g/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/sqlalchemy/testing/suite/test_dialect.pytest_do_ping,   s
   "zPingTest.test_do_pingN)__name__
__module____qualname____backend__r,   r*   r*   r*   r+   r    )   s    r    c                   @   s:   e Zd ZdZdd Zejee ddd Zdd Z	d	S )
ArgSignatureTesta  test that all visit_XYZ() in :class:`_sql.Compiler` subclasses have
    ``**kw``, for #8988.

    This test uses runtime code inspection.   Does not need to be a
    ``__backend__`` test as it only needs to run once provided all target
    dialects have been imported.

    For third party dialects, the suite would be run with that third
    party as a "--dburi", which means its compiler classes will have been
    imported by the time this test runs.

    c                  c   sZ    t jD ]} | dstd|   qtg}|r+|d}||  |V  |sd S d S )N_zsqlalchemy.dialects.%sr   )	r   __all__
startswith	importlibimport_moduler   popextend__subclasses__)dstackclsr*   r*   r+   _all_subclassesA   s   


z ArgSignatureTest._all_subclasses)paramsc                 c   s    |j V  d S r!   )param)r(   requestr*   r*   r+   all_subclassesM   s   zArgSignatureTest.all_subclassesc                 C   sL   |}|j D ]}|dr#t||}t|}t|jd|j d| d qd S )Nvisit_zCompiler visit method .z:() does not accommodate for **kw in its argument signature)__dict__r4   getattrr   r
   varkwr-   )r(   rA   r<   kmethinspr*   r*   r+    test_all_visit_methods_accept_kwQ   s   


z1ArgSignatureTest.test_all_visit_methods_accept_kwN)
r-   r.   r/   __doc__r=   r   fixturelistrA   rJ   r*   r*   r*   r+   r1   3   s    
r1   c                   @   s:   e Zd ZdZdZdZedd Zej	dd Z
dd	 Zd
S )ExceptionTestzTest basic exception wrapping.

    DBAPIs vary a lot in exception behavior so to actually anticipate
    specific exceptions from real round trips, we need to be conservative.

    eachTc              	   C   (   t d|tdtdddtdtd d S )N	manual_pkidTFprimary_keyautoincrementdata2   r   r   r   r   r<   metadatar*   r*   r+   define_tablesl      zExceptionTest.define_tablesc                 C   sz   t j .}| }|| jj ddd tt	j
|j| jj ddd |  W d    d S 1 s6w   Y  d S )Nr   d1rR   rV   )r   r"   r#   beginexecutetablesrQ   insertr   r   IntegrityErrorrollback)r(   r)   transr*   r*   r+   test_integrity_erroru   s   

"z"ExceptionTest.test_integrity_errorc                 C   s   t j >}z|ttd J  tjy3 } zt|}t|j	t|v s)J W Y d }~nd }~ww t
|ts;J W d    d S 1 sFw   Y  d S )Nu   méil)r   r"   r#   r`   r   r   r   
DBAPIErrorstrorig
isinstance)r(   r)   errerr_strr*   r*   r+   test_exception_with_non_ascii   s   ""z+ExceptionTest.test_exception_with_non_asciiN)r-   r.   r/   rK   run_deletesr0   classmethodr[   r   $duplicate_key_raises_integrity_errorrf   rm   r*   r*   r*   r+   rN   `   s    

rN   c                   @   sl   e Zd ZdZdZdd Zdd Zdd Zd	d
 Ze	j
jdd Ze	j
je	j
jdd Ze	j
jdd ZdS )IsolationLevelTestTisolation_levelc                 C   sF   t t}|d }|d }t|d|g}|r| S td d S )Ndefault	supported
AUTOCOMMITz(no non-default isolation level available)r   get_isolation_levelsr   set
differencer7   	skip_test)r(   levelsrt   ru   sr*   r*   r+    _get_non_default_isolation_level   s   
z3IsolationLevelTest._get_non_default_isolation_levelc                 C   s   t tjjjttd  d S )Nrt   )r   r   r"   r$   default_isolation_levelr   rw   )r(   r*   r*   r+   test_default_isolation_level   s   z/IsolationLevelTest.test_default_isolation_levelc                 C   s   |   }tj .}| }t|| |j|d t| | |j	|j
j t| | W d    d S 1 s:w   Y  d S )Nrr   )r}   r   r"   r#   get_isolation_levelr   execution_optionsr   r$   reset_isolation_levelr&   r'   )r(   non_defaultr)   existingr*   r*   r+    test_non_default_isolation_level   s   
"z3IsolationLevelTest.test_non_default_isolation_levelc              	   C   s   t t}|d }t|dgD ]Q}tj $}|j|d t|	 | |
 }|  t|	 | W d    n1 s?w   Y  tj }t|	 |d  W d    n1 s]w   Y  qd S )Nru   rv   rr   rt   )r   rw   r   rx   ry   r"   r#   r   r   r   r_   rd   )r(   r{   
all_levelslevelr)   re   r*   r*   r+   test_all_levels   s$   

z"IsolationLevelTest.test_all_levelsc              
   C   s`   |}t tjdd|jjdttd f  |j	dd W d   dS 1 s)w   Y  dS )z4test for the new get_isolation_level_values() methodNInvalid value '%s' for isolation_level. Valid isolation levels for '%s' are %sFOO, ru   rr   N)
r   r   ArgumentErrorr$   namejoinr   rw   r   r   )r(   connection_no_transr&   r*   r*   r+   #test_invalid_level_execution_option   s   "z6IsolationLevelTest.test_invalid_level_execution_optionc              
   C   sh   |t ddd}ttjdd|jjdtt	d f  |
  W d   dS 1 s-w   Y  dS )ztest for the new get_isolation_level_values() method
        and support for the dialect-level 'isolation_level' parameter.

        r   rr   optionsr   r   ru   N)dictr   r   r   r$   r   r   r   rw   r   r#   )r(   testing_engineengr*   r*   r+   test_invalid_level_engine_param   s   
"z2IsolationLevelTest.test_invalid_level_engine_paramc                 C   s   t t}|d }tt|d |dgd }|d|id}| }t| | W d    n1 s5w   Y  | }|j	|d t| | W d    n1 sVw   Y  | }t| | W d    d S 1 srw   Y  d S )Nrt   ru   rv   r   rs   r   rr   )
r   rw   r   sortedrx   ry   r#   r   r   r   )r(   r   r{   rt   ru   er)   r*   r*   r+   %test_dialect_user_setting_is_restored  s$   



"z8IsolationLevelTest.test_dialect_user_setting_is_restoredN)r-   r.   r/   r0   __requires__r}   r   r   r   r   requiresget_isolation_level_valuesr   #dialect_level_isolation_level_paramr    independent_readonly_connectionsr   r*   r*   r*   r+   rq      s    
rq   c                   @   s   e Zd ZdZdZdZedd ZdddZd	d
 Z	dd Z
dd Zejjedg dedddgdd Zejjedddgdd ZdS )AutocommitIsolationTestrO   )
autocommitTc              	   C   s,   t d|tdtdddtdtddd d S )	N
some_tablerR   TFrS   rV   rW   )test_needs_acidrX   rY   r*   r*   r+   r[     s   
z%AutocommitIsolationTest.define_tablesFc                 C   s   |r| j jj|dd |  | }|| j j ddd |  t|	t
| j jjj|r3dnd  |  |  || j j  W d    d S 1 sSw   Y  d S )NT)
checkfirstr   z	some datar^   )ra   r   createcommitr_   r`   rb   rd   r   scalarr   crR   delete)r(   r)   r   ensure_tablere   r*   r*   r+   _test_conn_autocommits)  s    

"z.AutocommitIsolationTest._test_conn_autocommitsc                 C   s<   |}|j dd}| |d |j|jj | |d d S )Nrv   rr   TF)r   r   r$   r   r&   r'   )r(   r   r)   c2r*   r*   r+   test_autocommit_on=  s
   z*AutocommitIsolationTest.test_autocommit_onc                 C   s   |}|  |d d S )NF)r   r(   r   r)   r*   r*   r+   test_autocommit_offF  s   z+AutocommitIsolationTest.test_autocommit_offc                 C   sB   |}|j dd}| |d |j ttd d | |d d S )Nrv   rr   Trt   F)r   r   r   rw   r   r   r*   r*   r+   .test_turn_autocommit_off_via_default_iso_levelJ  s   zFAutocommitIsolationTest.test_turn_autocommit_off_via_default_iso_levelautocommit_setting)falseengineoptionblock_rollbackc                 C   s   i }t |r
d|d< |jrd|d< ||d}| }|jr#|jdd | j||jp+|jdd tjj|j	d|j	j
d	}|  W d    n1 sJw   Y  |jsT|s_t|jt g d S t|jg  d S )
NTskip_autocommit_rollbackrv   rs   r   rr   )r   rd   )wraps)boolr   r#   r   r   r   r   patchobjectr&   rd   closer   r   
mock_callscall)r(   r   r   r   kwr   r)   check_rollbackr*   r*   r+   test_autocommit_blockX  s.   



z-AutocommitIsolationTest.test_autocommit_blockuse_dialect_settingc                 C   s   |r
|ddid}n| j dd}tt}|d }| }| |d W d   n1 s/w   Y  | }|j |d | |d W d   n1 sOw   Y  | }| |d W d   dS 1 sjw   Y  dS )	ztest #10147rs   rv   r   rr   rt   TNF)r   r   rw   r   r#   r   )r(   r   r   r   r{   rt   r)   r*   r*   r+   #test_dialect_autocommit_is_restoredw  s"   



"z;AutocommitIsolationTest.test_dialect_autocommit_is_restoredN)F)r-   r.   r/   rn   r   r0   ro   r[   r   r   r   r   r   r   r   	variationr   r   r   r*   r*   r*   r+   r     s"    

		r   c                   @   s   e Zd Zedd ZdS )EscapingTestc              	   C   s   | j }td|tdtd}|tj tj I}||	 t
dd ||	 t
dd t|t|jj|jjtdkd t|t|jj|jjtdkd W d	   d	S 1 sew   Y  d	S )
z|test that the DBAPI accommodates for escaped / nonescaped
        percent signs in a way that matches the compiler

        trV   rW   zsome % value)rV   zsome %% other valuez'some % value'z'some %% other value'N)rZ   r   r   r   r   r   r"   r_   r`   rb   r   r   r   r   r   rV   wherer   )r(   mr   r)   r*   r*   r+   test_percent_sign_round_trip  s.   	"z)EscapingTest.test_percent_sign_round_tripN)r-   r.   r/   r   r   r*   r*   r*   r+   r     s    r   c                   @   s4   e Zd ZdZdZdd Zdd Zdd Zd	d
 ZdS ) WeCanSetDefaultSchemaWEventsTestT)default_schema_name_switchc                 C   sL   t jjj}t }|  W d    n1 sw   Y  t|jj| d S r!   )r   r"   r$   default_schema_namer   r   r#   r   )r(   r   r   r*   r*   r+   test_control_case  s   

z2WeCanSetDefaultSchemaWEventsTest.test_control_casec                 C   sx   t jjj}t }t|ddd }| }|j	|}t
|t j W d    n1 s.w   Y  t
|jj| d S )Nr#   c                 S      t t| tj d S r!   r   r   test_schemar'   connection_recordr*   r*   r+   
on_connect     zMWeCanSetDefaultSchemaWEventsTest.test_wont_work_wo_insert.<locals>.on_connect)r   r"   r$   r   r   r   r   listens_forr#   _get_default_schema_namer   r   )r(   r   r   r   r)   what_it_should_ber*   r*   r+   test_wont_work_wo_insert  s   



z9WeCanSetDefaultSchemaWEventsTest.test_wont_work_wo_insertc                 C   st   t  }tj|ddddd }| }|j|}t|tj	 W d    n1 s+w   Y  t|jj
tj	 d S )Nr#   Trb   c                 S   r   r!   r   r   r*   r*   r+   r     r   zRWeCanSetDefaultSchemaWEventsTest.test_schema_change_on_connect.<locals>.on_connect)r   r   r   r   r#   r$   r   r   r   r   r   )r(   r   r   r)   r   r*   r*   r+   test_schema_change_on_connect  s   

z>WeCanSetDefaultSchemaWEventsTest.test_schema_change_on_connectc                 C   s   t  }tj|ddddd }| (}| }|j|}t|t	j
 |  |j|}t|t	j
 W d    n1 s?w   Y  t|jjt	j
 d S )Nr#   Tr   c                 W   r   r!   r   )r'   argr*   r*   r+   r     r   z\WeCanSetDefaultSchemaWEventsTest.test_schema_change_works_w_transactions.<locals>.on_connect)r   r   r   r   r#   r_   r$   r   r   r   r   rd   r   )r(   r   r   r)   re   r   r*   r*   r+   'test_schema_change_works_w_transactions  s   

	zHWeCanSetDefaultSchemaWEventsTest.test_schema_change_works_w_transactionsN)	r-   r.   r/   r0   r   r   r   r   r   r*   r*   r*   r+   r     s    	r   c                   @   s   e Zd ZdS )&FutureWeCanSetDefaultSchemaWEventsTestN)r-   r.   r/   r*   r*   r*   r+   r     s    r   c                   @   s   e Zd ZdZejdddddddd	d
ddddddddddddddZeejj	dd Z
ejdd Zedd Zedd  Zd!S )"DifficultParametersTestT)boring)zper cent)z
per % cent)z%percent)zpar(ens))zpercent%(ens)yah)zcol:ons)_starts_with_underscore)zdot.s)zmore :: %colons%)_name)___name)z[BracketsAndCase])	42numbers)zpercent%signs)z
has spaces)z	/slashes/)zmore/slashes)zq?marks)1param)z1col:on	paramname)argnamesc              	   C   s   |}t d|tdtddt|tddd}|| || dd|d	i t|j	| 
|j	| d	k}t||d	 t|j	| 
|j	| t|k}|||d	i }t|j| d	 t|j	| 
|j	| d	d
g}||  d S )Nr   rR   T)rT   rW   F)nullabler   z	some namezsome other_name)r   r   r   r   r   r`   rb   valuesr   r   r   r   r   r   first_mappingin_)r(   r   r&   rZ   r   r   stmtrowr*   r*   r+   !test_round_trip_same_named_column  s$   
"z9DifficultParametersTest.test_round_trip_same_named_columnc              
   c   sx    t d|tdttdtdtdtd}|| || dddd	d
ddd	dddd	dddd	g |V  d S )Nmytablemyidr   rW   descr   aa_desc)r   r   r   r   bb_descr   r   c_desc   r:   d_desc)r   r   r   r   r   r`   rb   )r(   rZ   r&   r   r*   r*   r+   multirow_fixtureB  s$   





	z(DifficultParametersTest.multirow_fixturec                 C   sD   |}t |jj|jjt|ddk}|||di}t|d d S )Nxvaluer   r   )r   r   r   r   r   r   r   r   r(   r   r&   r   tbl1r   resr*   r*   r+    test_standalone_bindparam_escapeY  s   z8DifficultParametersTest.test_standalone_bindparam_escapec                 C   s`   |}t |jj|jjt|ddgd|jj}|||ddgi	 }t
|ddg d S )Nr   r   r   r:   r   r   )r   r   r   r   r   r   r   order_byscalarsallr   r   r*   r*   r+   *test_standalone_bindparam_escape_expandingd  s   

zBDifficultParametersTest.test_standalone_bindparam_escape_expandingN)r-   r.   r/   r0   r   combinationstough_parametersr   r   unusual_column_name_charactersr   rL   r   r   r  r*   r*   r*   r+   r     sF    &


r   c                   @   s^   e Zd ZdZdZedd Zejdd Z	dd Z
d	d
 Zdd Zdd Zdd Zdd ZdS )ReturningGuardsTestz=test that the various 'returning' flags are set appropriatelyTc              	   C   rP   )Nr   rR   TFrS   rV   rW   rX   rY   r*   r*   r+   r[   x  r\   z!ReturningGuardsTest.define_tablesc                    s   | j j fdd}|S )Nc              
      s8  |  jj} |rd|sDttjd jj d jj d  	| |dddi|dddi|d	dd
ig W d    d S 1 s=w   Y  d S  	| |dddi|dddi|d	dd
ig}t
| g d d S |sttj  	| |dddi W d    d S 1 sw   Y  d S  	| |dddi}t
| dg d S )NzDialect z\+zW with current server capabilities does not support .*RETURNING when executemany is usedr   rV   r]   r   d2r   d3)r   )r   )r   r	  )	returningr   rR   r   r   StatementErrorr$   r   driverr`   r   r  r   rg   )r   executemanyid_param_nameexpect_successresultr&   r   r*   r+   go  sF   


"


"z(ReturningGuardsTest.run_stmt.<locals>.go)ra   r   )r(   r&   r  r*   r  r+   run_stmt  s   /zReturningGuardsTest.run_stmtc                 C   &   | j j}| }||dd|jj d S )NFrR   )ra   r   rb   r$   insert_returningr(   r&   r  r   r   r*   r*   r+   test_insert_single  s   z&ReturningGuardsTest.test_insert_singlec                 C   r  )NTrR   )ra   r   rb   r$   insert_executemany_returningr  r*   r*   r+   test_insert_many  s
   z$ReturningGuardsTest.test_insert_manyc                 C   `   | j j}|| dddddddddg | |jjtdk}||d	d|j	j
 d S 
Nr   r]   r^   r   r  r   r  b_idF)ra   r   r`   rb   updater   r   rR   r   r$   update_returningr  r*   r*   r+   test_update_single     	z&ReturningGuardsTest.test_update_singlec                 C   r  
Nr   r]   r^   r   r  r   r  r  T)ra   r   r`   rb   r  r   r   rR   r   r$   update_executemany_returningr  r*   r*   r+   test_update_many     	z$ReturningGuardsTest.test_update_manyc                 C   r  r  )ra   r   r`   rb   r   r   r   rR   r   r$   delete_returningr  r*   r*   r+   test_delete_single  r   z&ReturningGuardsTest.test_delete_singlec                 C   r  r!  )ra   r   r`   rb   r   r   r   rR   r   r$   delete_executemany_returningr  r*   r*   r+   test_delete_many  r$  z$ReturningGuardsTest.test_delete_manyN)r-   r.   r/   rK   r0   ro   r[   r   rL   r  r  r  r  r#  r&  r(  r*   r*   r*   r+   r  s  s    

4	r  )/r5    r   r   r   r   r   r	   r
   r   r   r   r   
assertionsr   r   r   	provisionr   schemar   r   r   r   r   r   r   r   r   r   sql.compilerr   utilr   TestBaser    r1   
TablesTestrN   rq   r   r   r   FutureEngineMixinr   r   r  r*   r*   r*   r+   <module>   sR   	
-8 |!
Cu