zmc
2023-08-08 e792e9a60d958b93aef96050644f369feb25d61b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
U
¸ý°dËTã@súddlZddlmZddlmZddlmZddlmZddlmZdd    lmZdd
lmZdd lm    Z    dd lm
Z
dd lm Z ddl m Z ddl mZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z Gdd „d ej!ƒZ"Gd!d"„d"ej!ƒZ#Gd#d$„d$ej$ƒZ%Gd%d&„d&ej!ƒZ&Gd'd(„d(ej$ƒZ'Gd)d*„d*ej!ƒZ(Gd+d,„d,ej!ƒZ)Gd-d.„d.ej*e)ƒZ+Gd/d0„d0ej!ƒZ,Gd1d2„d2ej$ƒZ-dS)3éNé)Ú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_getfullargspecc@seZdZdZdd„ZdS)ÚPingTestTc    Cs0tj ¡}ttjj |jj¡ƒW5QRXdS©N)rÚdbÚconnectr ÚdialectZdo_pingÚ
connectionÚdbapi_connection)ÚselfÚconn©r(ú\d:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\sqlalchemy/testing/suite/test_dialect.pyÚ test_do_ping%s ÿzPingTest.test_do_pingN)Ú__name__Ú
__module__Ú __qualname__Ú __backend__r*r(r(r(r)r"src@s:eZdZdZdd„Zejeeƒƒddd„ƒZdd„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.
 
    ccsRtjD]}| d¡st d|¡qtg}|rN| d¡}| | ¡¡|Vq*dS)NÚ_zsqlalchemy.dialects.%sr)    rÚ__all__Ú
startswithÚ    importlibÚ import_modulerÚpopÚextendÚ__subclasses__)ÚdÚstackÚclsr(r(r)Ú_all_subclasses:s
 
 
z ArgSignatureTest._all_subclasses)Úparamsccs |jVdSr )Úparam)r&Úrequestr(r(r)Úall_subclassesFszArgSignatureTest.all_subclassescCsL|}|jD]<}| d¡r
t||ƒ}t|ƒ}t|jd|j›d|›dƒq
dS)NZvisit_zCompiler visit method Ú.z:() does not accommodate for **kw in its argument signature)Ú__dict__r2Úgetattrrr
Úvarkwr+)r&r?r:ÚkÚmethZinspr(r(r)Ú test_all_visit_methods_accept_kwJs
 
 
þz1ArgSignatureTest.test_all_visit_methods_accept_kwN)
r+r,r-Ú__doc__r;rÚfixtureÚlistr?rFr(r(r(r)r/,s
 
r/c@s:eZdZdZdZdZedd„ƒZej    dd„ƒZ
dd    „Z d
S) Ú ExceptionTestz¶Test 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    Cs(td|tdtdddtdtdƒƒƒdS)NÚ    manual_pkÚidTF©Ú primary_keyZ autoincrementÚdataé2©rrrr©r:Úmetadatar(r(r)Ú define_tableses  üzExceptionTest.define_tablesc    Csdtj ¡P}| ¡}| |jj ¡dddœ¡tt    j
|j|jj ¡dddœƒ|  ¡W5QRXdS)NrÚd1©rMrP) rr!r"ÚbeginÚexecuteÚtablesrLÚinsertrrZIntegrityErrorÚrollback)r&r'Útransr(r(r)Útest_integrity_errorns 
ÿ
üz"ExceptionTest.test_integrity_errorc CsŠtj ¡v}z| ttdƒƒ¡ds(t‚WnBtjk
rl}z"t    |ƒ}t    |j
ƒt    |ƒks\t‚W5d}~XYnXt |t    ƒs|t‚W5QRXdS)NuméilF) rr!r"rYrrÚAssertionErrorrÚ
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-rGÚ run_deletesr.Ú classmethodrUrZ$duplicate_key_raises_integrity_errorr^rfr(r(r(r)rJYs
 
rJc@s\eZdZdZdZdd„Zdd„Zdd„Zd    d
„Ze    j
j d d „ƒZ e    j
j e    j
j d d„ƒƒZdS)ÚIsolationLevelTestT©Zisolation_levelcCsFt t¡}|d}|d}t|ƒ d|g¡}|r8| ¡St d¡dS)NÚdefaultÚ    supportedÚ
AUTOCOMMITz(no non-default isolation level available)rÚget_isolation_levelsrÚsetÚ
differencer5Z    skip_test)r&ÚlevelsrkrlÚsr(r(r)Ú _get_non_default_isolation_level˜s
z3IsolationLevelTest._get_non_default_isolation_levelcCsttjjjt t¡dƒdS)Nrk)rrr!r#Zdefault_isolation_levelrrn)r&r(r(r)Útest_default_isolation_level¤s þz/IsolationLevelTest.test_default_isolation_levelc    Csl| ¡}tj ¡P}| ¡}t||ƒ|j|dt| ¡|ƒ|j     |j
j ¡t| ¡|ƒW5QRXdS)Nrj) rsrr!r"Úget_isolation_levelr Úexecution_optionsrr#Úreset_isolation_levelr$r%)r&Z non_defaultr'Úexistingr(r(r)Ú test_non_default_isolation_levelªs 
 ÿz3IsolationLevelTest.test_non_default_isolation_levelc
Cs¢t t¡}|d}t|ƒ dg¡D]z}tj ¡>}|j|dt|     ¡|ƒ| 
¡}|  ¡t|     ¡|ƒW5QRXtj ¡}t|     ¡|dƒW5QRXq"dS)Nrlrmrjrk) rrnrrorpr!r"rvrrurXr\)r&rqZ
all_levelsÚlevelr'r]r(r(r)Útest_all_levels¼s
   þz"IsolationLevelTest.test_all_levelsc
CsJ|}ttjdd|jjd t t¡d¡fƒ|j    ddW5QRXdS)z4test for the new get_isolation_level_values() methodúNInvalid value '%s' for isolation_level. Valid isolation levels for '%s' are %sÚFOOú, rlrjN)
rrÚ ArgumentErrorr#ÚnameÚjoinrrnrrv)r&Úconnection_no_transr$r(r(r)Ú#test_invalid_level_execution_optionÒs ÿýþþ z6IsolationLevelTest.test_invalid_level_execution_optionc
CsR|tddd}ttjdd|jjd t t    ¡d¡fƒ| 
¡W5QRXdS)z…test for the new get_isolation_level_values() method
        and support for the dialect-level 'isolation_level' parameter.
 
        r}rj)Úoptionsr|r~rlN) Údictrrrr#r€rrrnrr")r&Útesting_engineÚengr(r(r)Útest_invalid_level_engine_paramås ÿýþþ z2IsolationLevelTest.test_invalid_level_engine_paramN)r+r,r-r.Ú __requires__rsrtryr{rÚrequiresZget_isolation_level_valuesrƒZ#dialect_level_isolation_level_paramrˆr(r(r(r)ri“s 
ric@sDeZdZdZdZdZedd„ƒZdd„Zdd    „Z    d
d „Z
d d „Z dS)ÚAutocommitIsolationTestrK)Ú
autocommitTc    Cs,td|tdtdddtdtdƒƒdddS)    NÚ
some_tablerMTFrNrPrQ)Ztest_needs_acidrRrSr(r(r)rUs ûz%AutocommitIsolationTest.define_tablesc    Cs€| ¡}| |jj ¡dddœ¡| ¡t| t|jjj    j
ƒ¡|rHdndƒ| ¡| ¡| |jj  ¡¡W5QRXdS)Nrz    some datarW) rXrYrZrr[r\rÚscalarrÚcrMÚdelete)r&r'rŒr]r(r(r)Ú_test_conn_autocommitss
ÿ
þ
z.AutocommitIsolationTest._test_conn_autocommitscCs<|}|jdd}| |d¡|j |jj¡| |d¡dS)NrmrjTF)rvr‘r#rwr$r%)r&r‚r'Úc2r(r(r)Útest_autocommit_ons
  z*AutocommitIsolationTest.test_autocommit_oncCs|}| |d¡dS)NF)r‘©r&r‚r'r(r(r)Útest_autocommit_off(sz+AutocommitIsolationTest.test_autocommit_offcCsB|}|jdd}| |d¡|jt t¡dd| |d¡dS)NrmrjTrkF)rvr‘rrnrr”r(r(r)Ú.test_turn_autocommit_off_via_default_iso_level,s  ÿÿzFAutocommitIsolationTest.test_turn_autocommit_off_via_default_iso_levelN) r+r,r-rgr‰r.rhrUr‘r“r•r–r(r(r(r)r‹ýs
        r‹c@seZdZedd„ƒZdS)Ú EscapingTestc    CsÂ|j}td|tdtdƒƒƒ}| tj¡tj ¡†}| |     ¡t
dd¡| |     ¡t
dd¡t |  t |jjƒ |jjtdƒk¡¡dƒt |  t |jjƒ |jjtdƒk¡¡dƒW5QRXd    S)
z|test that the DBAPI accommodates for escaped / nonescaped
        percent signs in a way that matches the compiler
 
        ÚtrPrQz some % value)rPzsome %% other valuez'some % value'z'some %% other value'N)rTrrrÚcreaterr!rXrYr[r…rrŽrrrPÚ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—;sr—c@s4eZdZdZdZdd„Zdd„Zdd„Zd    d
„Zd S) Ú WeCanSetDefaultSchemaWEventsTestT)Zdefault_schema_name_switchc    Cs8tjjj}t ¡}| ¡W5QRXt|jj|ƒdSr )rr!r#Údefault_schema_namerr†r"r)r&ržr‡r(r(r)Útest_control_caseas
 
 
 
z2WeCanSetDefaultSchemaWEventsTest.test_control_casec    Csdtjjj}t ¡}t |d¡dd„ƒ}| ¡}|j     |¡}t
|tj ƒW5QRXt
|jj|ƒdS)Nr"cSstt|tjƒdSr ©rrÚ test_schema©r%Zconnection_recordr(r(r)Ú
on_connectos
ÿzMWeCanSetDefaultSchemaWEventsTest.test_wont_work_wo_insert.<locals>.on_connect) rr!r#ržrr†rÚ listens_forr"Ú_get_default_schema_namerr¡)r&ržr‡r£r'Úwhat_it_should_ber(r(r)Útest_wont_work_wo_insertjs
 
 
 
 z9WeCanSetDefaultSchemaWEventsTest.test_wont_work_wo_insertc    Cs`t ¡}tj|ddddd„ƒ}| ¡}|j |¡}t|tj    ƒW5QRXt|jj
tj    ƒdS)Nr"T©r[cSstt|tjƒdSr r r¢r(r(r)r£~s
ÿzRWeCanSetDefaultSchemaWEventsTest.test_schema_change_on_connect.<locals>.on_connect) rr†rr¤r"r#r¥rrr¡rž)r&r‡r£r'r¦r(r(r)Útest_schema_change_on_connect{s
 
 z>WeCanSetDefaultSchemaWEventsTest.test_schema_change_on_connectc    Csˆt ¡}tj|ddddd„ƒ}| ¡F}| ¡}|j |¡}t|t    j
ƒ|  ¡|j |¡}t|t    j
ƒW5QRXt|jj t    j
ƒdS)Nr"Tr¨cWstt|tjƒdSr r )r%Úargr(r(r)r£s
ÿz\WeCanSetDefaultSchemaWEventsTest.test_schema_change_works_w_transactions.<locals>.on_connect) rr†rr¤r"rXr#r¥rrr¡r\rž)r&r‡r£r'r]r¦r(r(r)Ú'test_schema_change_works_w_transactionsŠs
 
   zHWeCanSetDefaultSchemaWEventsTest.test_schema_change_works_w_transactionsN)    r+r,r-r.r‰rŸr§r©r«r(r(r(r)r\s     rc@s eZdZdS)Ú&FutureWeCanSetDefaultSchemaWEventsTestN)r+r,r-r(r(r(r)r¬Ÿsr¬c@s€eZdZdZejdddddddd    d
d d d dddddddddddZeejj    dd„ƒƒZ
ej dd„ƒZ edd„ƒZ edd „ƒZd!S)"ÚDifficultParametersTestT)Zboring)zper cent)z
per % cent)z%percent)zpar(ens))zpercent%(ens)yah)zcol:ons)Z_starts_with_underscore)zdot.s)zmore :: %colons%)Ú_name)Z___name)z[BracketsAndCase])Z    42numbers)z percent%signs)z
has spaces)z    /slashes/)z more/slashes)zq?marks)Z1param)z1col:onÚ    paramname)Úargnamesc    Csú|}td|tdtddt|tdƒddƒ}| |¡| | ¡ dd|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¡¡}| |¡ ¡}dS) Nr˜rMT)rOrQF)Znullablerz    some namezsome other_name)rrrrr™rYr[ÚvaluesrrršrrŽrÚfirstÚ_mappingÚin_)r&r¯r$rTr€r˜ÚstmtÚrowr(r(r)Ú!test_round_trip_same_named_columnÁs$ ü
"ÿz9DifficultParametersTest.test_round_trip_same_named_columnc
csvtd|tdtƒtdtdƒƒtdtdƒƒƒ}| |¡| | ¡dddd    œd
d d d    œd ddd    œdddd    œg¡|VdS)NÚmytableÚmyidr€rQÚdescrÚaZa_desc)r¹r€rºrÚbZb_descrrZc_descér8Zd_desc)rrrrr™rYr[)r&rTr$r¸r(r(r)Úmultirow_fixtureés"  û
 
 
 
 
üþ    z(DifficultParametersTest.multirow_fixturecCsD|}t|jjƒ |jjt|ddk¡}| ||di¡}t|dƒdS)NÚx©Úvaluerr)rrr¹ršr€rrŽr©r&r¯r$r¾Ztbl1rµÚresr(r(r)Ú test_standalone_bindparam_escapes  ÿz8DifficultParametersTest.test_standalone_bindparam_escapecCs`|}t|jjƒ |jj t|ddgd¡¡ |jj¡}| ||ddgi¡     ¡}t
|ddgƒdS)Nr»r¼rÀr8rr½) rrr¹ršr€r´rZorder_byZscalarsÚallrrÂr(r(r)Ú*test_standalone_bindparam_escape_expanding s ÿþÿzBDifficultParametersTest.test_standalone_bindparam_escape_expandingN)r+r,r-r.rÚ combinationsZtough_parametersrrZunusual_column_name_charactersr·rHr¾rÄrÆr(r(r(r)r­¥sDê &
 
 
r­c@s^eZdZdZdZedd„ƒZejdd„ƒZ    dd„Z
d    d
„Z d d „Z d d„Z dd„Zdd„ZdS)ÚReturningGuardsTestz=test that the various 'returning' flags are set appropriatelyTc    Cs(td|tdtdddtdtdƒƒƒdS)Nr˜rMTFrNrPrQrRrSr(r(r)rUs  üz!ReturningGuardsTest.define_tablescs|jj‰‡‡fdd„}|S)Nc
s| ˆjj¡}|r°|spttjdˆjj›dˆjj›dƒ0ˆ     ||dddi|dddi|d    dd
ig¡}W5QRXn>ˆ     ||dddi|dddi|d    dd
ig¡}t
|  ¡d d d gƒnT|sàt tj ƒˆ     ||dddi¡W5QRXn$ˆ     ||dddi¡}t
|  ¡d gƒdS)NzDialect z\+zW with current server capabilities does not support .*RETURNING when executemany is usedrrPrVrÚd2rÚd3)r)r)r)Z    returningrrMrrZStatementErrorr#r€ZdriverrYrrÅrr`)rµZ executemanyZ id_param_nameZexpect_successÚresult©r$r˜r(r)Úgo-sBþ
 
 
ýþ    
 
 
ýþ 
ÿ
ÿz(ReturningGuardsTest.run_stmt.<locals>.go)rZr˜)r&r$rÍr(rÌr)Úrun_stmt)s/zReturningGuardsTest.run_stmtcCs&|jj}| ¡}||dd|jjƒdS)NFrM)rZr˜r[r#Zinsert_returning©r&r$rÎr˜rµr(r(r)Útest_insert_single^sz&ReturningGuardsTest.test_insert_singlecCs&|jj}| ¡}||dd|jjƒdS)NTrM)rZr˜r[r#Zinsert_executemany_returningrÏr(r(r)Útest_insert_manyesÿz$ReturningGuardsTest.test_insert_manycCs`|jj}| | ¡dddœdddœdddœg¡| ¡ |jjtdƒk¡}||d    d|j    j
ƒdS©
NrrVrWrrÉrrÊÚb_idF) rZr˜rYr[ÚupdateršrrMrr#Zupdate_returningrÏr(r(r)Útest_update_singlensýþ    z&ReturningGuardsTest.test_update_singlecCs`|jj}| | ¡dddœdddœdddœg¡| ¡ |jjtdƒk¡}||d    d|j    j
ƒdS©
NrrVrWrrÉrrÊrÓT) rZr˜rYr[rÔršrrMrr#Zupdate_executemany_returningrÏr(r(r)Útest_update_many~sýþ    ÿz$ReturningGuardsTest.test_update_manycCs`|jj}| | ¡dddœdddœdddœg¡| ¡ |jjtdƒk¡}||d    d|j    j
ƒdSrÒ) rZr˜rYr[rršrrMrr#Zdelete_returningrÏr(r(r)Útest_delete_singlesýþ    z&ReturningGuardsTest.test_delete_singlecCs`|jj}| | ¡dddœdddœdddœg¡| ¡ |jjtdƒk¡}||d    d|j    j
ƒdSrÖ) rZr˜rYr[rršrrMrr#Zdelete_executemany_returningrÏr(r(r)Útest_delete_many sýþ    ÿz$ReturningGuardsTest.test_delete_manyN)r+r,r-rGr.rhrUrrHrÎrÐrÑrÕr×rØrÙr(r(r(r)rÈs
    
4    rÈ).r3Úrrrrrr    r
r r r Z
assertionsrrrZ    provisionrZschemarrrrrrrrrrZ sql.compilerrÚutilrZTestBaserr/Z
TablesTestrJrir‹r—rZFutureEngineMixinr¬r­rÈr(r(r(r)Ú<module>sN                          
-:j>!C
ÿu