gYddlZddlmZddlmZddlmZddlmZddlmZdd lmZdd lmZdd lm Z dd lm Z dd lm Z ddl m Z ddl mZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z Gdd ejBZ"Gd!d"ejBZ#Gd#d$ejHZ%Gd%d&ejBZ&Gd'd(ejHZ'Gd)d*ejBZ(Gd+d,ejBZ)Gd-d.ejTe)Z+Gd/d0ejBZ,Gd1d2ejHZ-y)3N)testing) assert_raises)config)engines)eq_)fixtures) is_not_none)is_true)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_getfullargspecceZdZdZdZy)PingTestTctjj5}ttjjj |j jdddy#1swYyxYwN)rdbconnectr dialectdo_ping connectiondbapi_connection)selfconns V/opt/hc_python/lib64/python3.12/site-packages/sqlalchemy/testing/suite/test_dialect.py test_do_pingzPingTest.test_do_ping+sJ ZZ   !T  ""**4??+K+KL " ! !s AA//A8N)__name__ __module__ __qualname__ __backend__r-r,r!r!(s Kr3r!cdeZdZdZdZej eedZdZ y)ArgSignatureTestatest 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# KtjD],}|jdrtjd|z.t g}|r8|j d}|j|j||r7yyw)N_zsqlalchemy.dialects.%sr) r__all__ startswith importlib import_modulerpopextend__subclasses__)dstackclss r,_all_subclassesz ArgSignatureTest._all_subclasses@sn!!A<<$''(@1(DE" ))A,C LL++- .Is%BABB)paramsc#(K|jywr#)param)r*requests r,all_subclasseszArgSignatureTest.all_subclassesLsmmsc |}|jD]R}|jdst||}t|}t |j d|j d|dTy)Nvisit_zCompiler visit method .z:() does not accommodate for **kw in its argument signature)__dict__r9getattrrr varkwr.)r*rGrAkmethinsps r, test_all_visit_methods_accept_kwz1ArgSignatureTest.test_all_visit_methods_accept_kwPsbA||H%sA-d3JJ,S\\N!A3?II r3N) r.r/r0__doc__rBrfixturelistrGrQr2r3r,r5r52s8  W__D!2345 r3r5cReZdZdZdZdZedZejdZ dZ y) 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 htd|tdtddtdtdy)N manual_pkidTF primary_key autoincrementdata2rrrrrAmetadatas r, define_tableszExceptionTest.define_tablesks,   4d% H 66": &  r3c tjj5}|j}|j |j j jdddttj|j|j j jddd|jdddy#1swYyxYw)Nrd1rZr^) rr$r%beginexecutetablesrYinsertrrIntegrityErrorrollback)r*r+transs r,test_integrity_errorz"ExceptionTest.test_integrity_errorts YY   DJJLE LL %%,,.q$0G  ""  %%,,.$'   NN ! s B#C  Ccvtjj5} |jt t dJ#t j$r7}t|}t|jt|vsJYd}~nd}~wwxYwt|tsJ dddy#1swYyxYw)Numéil) rr$r%rhrrr DBAPIErrorstrorig isinstance)r*r+errerr_strs r,test_exception_with_non_asciiz+ExceptionTest.test_exception_with_non_asciis YY   D 1  VN7$;<=u>> 1c(388}C000 1 gs+ ++! s.B/%AB-B B/ BB//B8N) r.r/r0rR run_deletesr1 classmethodrcr$duplicate_key_raises_integrity_errorrnrvr2r3r,rVrV_sDKK  667 ,r3rVceZdZdZdZdZdZdZdZe jjdZ e jje jjdZe jjd Zy ) IsolationLevelTestTisolation_levelctjt}|d}|d}t|j d|g}|r|j Stj dy)Ndefault supported AUTOCOMMITz(no non-default isolation level available)rget_isolation_levelsrset differencer< skip_test)r*levelsrrss r, _get_non_default_isolation_levelz3IsolationLevelTest._get_non_default_isolation_levels\226:#;'  N % %|W&= > 557N   G Hr3cttjjjt j tdy)Nr)r rr$r&default_isolation_levelrr)r*s r,test_default_isolation_levelz/IsolationLevelTest.test_default_isolation_levels0 II   5 5  - -f 5i @ r3c|j}tjj5}|j }t |||j |t|j ||jj|jjt|j |dddy#1swYyxYw)Nr|) rrr$r%get_isolation_levelr execution_optionsr r&reset_isolation_levelr(r))r* non_defaultr+existings r, test_non_default_isolation_levelz3IsolationLevelTest.test_non_default_isolation_levels;;= YY   D//1H + &  " "; " ? ((*K 8 LL . .00  ((*H 5! s BC  CcRtjt}|d}t|j dgD]}tj j 5}|j|t|j||j}|jt|j|dddtj j 5}t|j|ddddy#1swYPxYw#1swYxYw)Nrrr|r) rrrrrr$r%rr rrgrl)r*r all_levelslevelr+rms r,test_all_levelsz"IsolationLevelTest.test_all_levelss226:K( _//?E""$&&u&=D,,.6  D,,.6%""$,,.9%%$@$$%$sA'D(DD D& c |}ttjddd|jjddj t jtd5|jddddy#1swYyxYw) z4test for the new get_isolation_level_values() methodInvalid value 'FOO3' for isolation_level. Valid isolation levels for '' are , rr|N) rr ArgumentErrorr&namejoinrrrr)r*connection_no_transr(s r,#test_invalid_level_execution_optionz6IsolationLevelTest.test_invalid_level_execution_optionsu) "   ""''  55f=kJ      ( ( ( ?    s #A??Bc 4|td}ttjddd|jj ddj tjtd5|jd d d y #1swYy xYw) ztest for the new get_isolation_level_values() method and support for the dialect-level 'isolation_level' parameter. rr|optionsrrrrrN) dictrrrr&rrrrrr%)r*testing_engineengs r,test_invalid_level_engine_paramz2IsolationLevelTest.test_invalid_level_engine_paramsuT%%@A "        55f=kJ     KKM    s 4BBcJtjt}|d}tt |dj |dgd}|d|i}|j 5}t|j|ddd|j 5}|j|t|j|ddd|j 5}t|j|dddy#1swYxYw#1swYIxYw#1swYyxYw)Nrrrrr}rr|) rrrsortedrrr%r rr)r*rrrrer+s r,%test_dialect_user_setting_is_restoredz8IsolationLevelTest.test_dialect_user_setting_is_restoreds226:# F;'(33Wl4KL   $5y#A B YY[D ((*I 6YY[D  " "7 " ; ((*G 4YY[D ((*I 6[[[[s$%D-D DD  DD"N)r.r/r0r1 __requires__rrrrrrequiresget_isolation_level_valuesr#dialect_level_isolation_level_paramr independent_readonly_connectionsrr2r3r,r{r{sK'L I 6$, 00@1@$ 00 99:1* 66777r3r{ceZdZdZdZdZedZdZdZ dZ dZ e jje jd dd gd Zy ) AutocommitIsolationTestrW) autocommitTc ltd|tdtddtdtddy) N some_tablerZTFr[r^r_)test_needs_acidr`ras r,rcz%AutocommitIsolationTest.define_tabless/   4d% H 66": &  r3c"|j}|j|jjj ddd|j t |jt|jjjj|rdnd|j |j5|j|jjjdddy#1swYyxYw)Nrz some datarf) rgrhrirrjrlr scalarrcrZdelete)r*r+rrms r,_test_conn_autocommitsz.AutocommitIsolationTest._test_conn_autocommits(s  KK " " ) ) +A{-K   KKt{{5577::; <A   ZZ\ LL//668 9\\s 4DDc|}|jd}|j|d|jj|jj |j|dy)Nrr|TF)rrr&rr(r))r*rr+c2s r,test_autocommit_onz*AutocommitIsolationTest.test_autocommit_on8sV"  # #L # A ##B- (()G)GH ##D%0r3c,|}|j|dy)NF)rr*rr+s r,test_autocommit_offz+AutocommitIsolationTest.test_autocommit_offAs" ##D%0r3c|}|jd}|j|d|jtjtd|j|dy)Nrr|TrF)rrrrrrs r,.test_turn_autocommit_off_via_default_iso_levelzFAutocommitIsolationTest.test_turn_autocommit_off_via_default_iso_levelEsg#%%l%C ##D$/ (==fE  ##D%0r3use_dialect_settingFc|r |ddi}n|jd}tjt}|d}|j 5}|j |dddd|j 5}|j||j |dddd|j 5}|j |ddddy#1swYrxYw#1swYAxYw#1swYyxYw) z test #10147r}rrr|rTNF)rrrrr%r)r*rrrrrr+s r,#test_dialect_autocommit_is_restoredz;AutocommitIsolationTest.test_dialect_autocommit_is_restoredSs (9<'HIA 22 ,3A226:# YY[D  ' 'd 3YY[D  " "7 " ;  ' 'e 4YY[D  ' 'd 3[[[[s$C?%C$<C0C!$C-0C9N)r.r/r0rwrr1rxrcrrrrrrr variationrr2r3r,rrssK"LK  : 11 1 66W,tUm<4=74r3rceZdZedZy) EscapingTestc D|j}td|tdtd}|j t j t j j5}|j|jtd|j|jtdt|jt|jjj!|jjt#dk(dt|jt|jjj!|jjt#dk(dd d d y #1swYy xYw) z|test that the DBAPI accommodates for escaped / nonescaped percent signs in a way that matches the compiler tr^r_z some % value)r^zsome %% other valuez'some % value'z'some %% other value'N)rbrrrcreaterr$rgrhrjrr rrrr^wherer)r*mrr+s r,test_percent_sign_round_tripz)EscapingTest.test_percent_sign_round_tripqs MM #q&4 5  YY__ $ LLT~%> ? LLT/D%E F  13388$**N3C$DD     13388$**N3J$KK &    s *D#FFN)r.r/r0rrr2r3r,rrpsr3rc,eZdZdZdZdZdZdZdZy) WeCanSetDefaultSchemaWEventsTestT)default_schema_name_switchctjjj}t j }|j 5 dddt|jj|y#1swY*xYwr#)rr$r&default_schema_namerrr%r )r*rrs r,test_control_casez2WeCanSetDefaultSchemaWEventsTest.test_control_casesV$ii//CC$$& [[]  CKK + +-@A]s A44A=ctjjj}t j }t j|dd}|j5}|jj|}t|tjdddt|jj|y#1swY*xYw)Nr%cBtt|tjyr#rr test_schemar)connection_records r, on_connectzMWeCanSetDefaultSchemaWEventsTest.test_wont_work_wo_insert..on_connect ,(&*<*< r3) rr$r&rrrr listens_forr%_get_default_schema_namer r)r*rrrr+what_it_should_bes r,test_wont_work_wo_insertz9WeCanSetDefaultSchemaWEventsTest.test_wont_work_wo_inserts$ii//CC$$&   3 *  +  [[]d # D DT J  !6#5#5 6 CKK + +-@A ]s %6CC cxtj}tj|ddd}|j 5}|j j |}t|tjdddt|j jtjy#1swY8xYw)Nr%TrjcBtt|tjyr#rrs r,rzRWeCanSetDefaultSchemaWEventsTest.test_schema_change_on_connect..on_connectrr3) rrrrr%r&rr rrr)r*rrr+rs r,test_schema_change_on_connectz>WeCanSetDefaultSchemaWEventsTest.test_schema_change_on_connects$$&   3 $ 7  8  [[]d # D DT J  !6#5#5 6 CKK + +V-?-?@ ]s 6B00B9c"tj}tj|ddd}|j 5}|j }|j j|}t|tj|j|j j|}t|tjdddt|j jtjy#1swY8xYw)Nr%TrcBtt|tjyr#r)r)args r,rz\WeCanSetDefaultSchemaWEventsTest.test_schema_change_works_w_transactions..on_connectrr3) rrrrr%rgr&rr rrrlr)r*rrr+rmrs r,'test_schema_change_works_w_transactionszHWeCanSetDefaultSchemaWEventsTest.test_schema_change_works_w_transactionss$$&   3 $ 7  8  [[]dJJLE # D DT J  !6#5#5 6 NN  # D DT J  !6#5#5 6 CKK + +V-?-?@]s B DDN) r.r/r0r1rrrrrr2r3r,rrs$K2LBB" AAr3rc eZdZy)&FutureWeCanSetDefaultSchemaWEventsTestN)r.r/r0r2r3r,rrs r3rceZdZdZej dddddddd d d d d ddddddddddZeejjdZ ejdZ edZ edZy)DifficultParametersTestT)boring)zper cent)z per % cent)z%percent)zpar(ens))zpercent%(ens)yah)zcol:ons)_starts_with_underscore)zdot.s)zmore :: %colons%)_name)___name)z[BracketsAndCase]) 42numbers)z percent%signs)z has spaces)z /slashes/)z more/slashes)zq?marks)1param)z1col:on paramname)argnamesc V|}td|tdtdt|tdd}|j ||j |j jdd|d it|j|j|j|d k(}t|j|d t|j|j|j|t|k(}|j ||d ij}t|j|d t|j|j|j|j!d d g}|j |j}y) NrrZT)r\r_F)nullablerz some namezsome other_name)rrrrrrhrjvaluesrrrr rrfirst_mappingin_)r*rr(rbrrstmtrows r,!test_round_trip_same_named_columnz9DifficultParametersTest.test_round_trip_same_named_columnsg     4d 3 4e 4    188:,,dAt[-IJKacc$i &&qss4yK'?@ J  d #[1acc$i &&qss4yIdO'CD  k':;AAC CLL  ,acc$i && CCIMM;(9: ;   &,,.r3c #$Ktd|tdttdtdtdtd}|j ||j |j dddd d d d d d ddd dddd g|yw)Nmytablemyidrr_descraa_desc)rrrrbb_descrrc_descr?d_desc)rrrrrrhrj)r*rbr(rs r,multirow_fixturez(DifficultParametersTest.multirow_fixtures   67 # 66": & 66": &   z" NN C:C:C:C:    sBBc|}t|jjj|jjt |dk(}|j ||di}t|dy)Nxvaluerr)rrrrrrrr r*rr(r tbl1rress r, test_standalone_bindparam_escapez8DifficultParametersTest.test_standalone_bindparam_escape5s_ dffkk"(( FFKK9Yc: : y#&67 C r3c n|}t|jjj|jjj t |ddgj|jj}|j||ddgij}t|ddgy)Nrrrr?rr ) rrrrrrrorder_byscalarsallr rs r,*test_standalone_bindparam_escape_expandingzBDifficultParametersTest.test_standalone_bindparam_escape_expanding@s  466;;  U466;;??9YsCj#IJ K Xdffkk "    C:'>?CCE C!Qr3N)r.r/r0r1r combinationstough_parametersrrunusual_column_name_charactersrrSr rrr2r3r,rrsK+w++$-2 77$/8$/L __,  r3rcleZdZdZdZedZejdZ dZ dZ dZ dZ d Zd Zy ) ReturningGuardsTestz=test that the various 'returning' flags are set appropriatelyTc htd|tdtddtdtdy)NrrZTFr[r^r_r`ras r,rcz!ReturningGuardsTest.define_tablesTs,   4d% H 66": &  r3cB|jjfd}|S)Nc |jjj}|r|stttj dj jdj jd5j||dddi|dddi|d dd ig}dddyj||dddi|dddi|d dd ig}t|jgd y|s9ttj5j||dddidddyj||dddi}t|jd gy#1swYyxYw#1swYyxYw) NzDialect z\+zW with current server capabilities does not support .*RETURNING when executemany is usedrr^rerd2rd3)r)r)rr#) returningrrZrrStatementErrorr&rdriverrhr rrrp)r executemany id_param_nameexpect_successresultr(rs r,goz(ReturningGuardsTest.run_stmt..goas|>>!##&&)D%/**#J$6$6$;$;#F tf-K:76s4"E 8E EE)rir)r*r(r+rs ` @r,run_stmtzReturningGuardsTest.run_stmt]s KKMM- .^ r3c|jj}|j}||dd|jjy)NFrZ)rirrjr&insert_returningr*r(r,rrs r,test_insert_singlez&ReturningGuardsTest.test_insert_singles4 KKMMxxzudJ$6$6$G$GHr3c|jj}|j}||dd|jjy)NTrZ)rirrjr&insert_executemany_returningr/s r,test_insert_manyz$ReturningGuardsTest.test_insert_manys7 KKMMxxz $j00MM r3cD|jj}|j|jdddddddddg|j j |j jtdk(}||d d|jjy Nrrerfrr!rr"b_idF) rirrhrjupdaterrrZrr&update_returningr/s r,test_update_singlez&ReturningGuardsTest.test_update_single KKMM HHJ$'$'$'  xxz)F*; ;<ufj&8&8&I&IJr3cD|jj}|j|jdddddddddg|j j |j jtdk(}||d d|jjy Nrrerfrr!rr"r6T) rirrhrjr7rrrZrr&update_executemany_returningr/s r,test_update_manyz$ReturningGuardsTest.test_update_many KKMM HHJ$'$'$'  xxz)F*; ;< $ 2 2 O O r3cD|jj}|j|jdddddddddg|j j |j jtdk(}||d d|jjyr5) rirrhrjrrrrZrr&delete_returningr/s r,test_delete_singlez&ReturningGuardsTest.test_delete_singler:r3cD|jj}|j|jdddddddddg|j j |j jtdk(}||d d|jjyr<) rirrhrjrrrrZrr&delete_executemany_returningr/s r,test_delete_manyz$ReturningGuardsTest.test_delete_manyr?r3N)r.r/r0rRr1rxrcrrSr,r0r3r9r>rBrEr2r3r,rrOsVGK   __22hI K  $K  r3r).r:rrrrr r r r r r assertionsrrr provisionrschemarrrrrrrrrr sql.compilerrutilrTestBaser!r5 TablesTestrVr{rrrFutureEngineMixinrrrr2r3r,rOs#&.!8$*x  *x((*Z5,H''5,p}7**}7@V4h11V4r8$$B@Ax'8'8@AF   @ rh//rjU (--U r3