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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
U
¸ý°d´Nã@sädZddlmZddlZddlZddlZddlZddlmZddl    Z    ddl    m
Z
ddl    m Z ddl    m Z ddl    m Z dd    l    mZdd
l    mZdd l    mZdd l    mZdd l    mZddl    mZddl    mZddl    mZddl    mZddl    mZddl    mZddlZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%ddl&m'Z'ddl&m(Z(d d!lm)Z)d d"lm*Z*d d#lm+Z+d d$lm,Z,d d%l-m.Z.d d&l-m/Z/d d'l-m0Z0d d(l-m1Z1d d)l2m3Z3d d*l4m5Z5d d+l6m7Z7d d,l6m8Z8d d-l6m9Z9d d.l:m;Z;d d/l<m=Z=d d0l<m>Z>e    jr„dd1l?m@Z@dd2lmAZAdd3lmBZBdd4lmCZCdd5lmDZDdd6lmEZEdd7lmFZFdd8lmGZGdd9lmHZHdd:lmIZIdd;lmJZJdd<lKmLZLdd=lMmNZNd d>l)mOZOd d?l+mPZPd d@l+mQZQd dAl-mRZRd dBl6mSZSd dCl6mTZTd dDl6mUZUd dElVmWZWd dFlVmXZXd dGl:mYZYd dHlZm[Z[d dIl\m]Z]d dJl\m^Z^e _dKej`ejaB¡Zbece!ƒ\ZdZeZfZgZhGdLdM„dMe#ƒZiGdNdO„dOeiƒZjGdPdQ„dQe%ƒZkekei_ldS)RaDefault implementations of per-dialect sqlalchemy.engine classes.
 
These are semi-private implementation classes which are only of importance
to database dialect authors; dialects will usually use the classes here
as the base class for their own corresponding classes.
 
é)Ú annotationsN)Ú perf_counter)ÚAny)ÚCallable)Úcast)ÚDict)ÚList)ÚMapping)ÚMutableMapping)ÚMutableSequence)ÚOptional)ÚSequence)ÚSet)ÚTuple)ÚType)Ú TYPE_CHECKING)ÚUnioné)Úcharacteristics)Úcursor)Ú
interfaces)Ú
Connection)Ú
CacheStats)Ú DBAPICursor)ÚDialect)Ú ExecuteStyle)ÚExecutionContext)Ú
ObjectKind)Ú ObjectScopeé)Úevent)Úexc)Úpool)Úutil)Úcompiler)Údml)Ú
expression)Útype_api)Ú is_tuple_type)Ú_NoArg)Ú DDLCompiler)ÚInsertmanyvaluesSentinelOpts)Ú SQLCompiler)Ú quoted_name)ÚFinal)ÚLiteral)Ú
ModuleType)ÚEngine)Ú_CoreMultiExecuteParams)Ú_CoreSingleExecuteParams)Ú_DBAPICursorDescription)Ú_DBAPIMultiExecuteParams)Ú_ExecuteOptions)Ú_MutableCoreSingleExecuteParams)Ú _ParamStyle)ÚDBAPIConnection)ÚIsolationLevel)ÚRow)ÚURL)Ú_ListenerFnType)ÚPool)ÚPoolProxiedConnection)Ú
Executable)ÚCompiled)ÚLinting)ÚResultColumnsEntry)ÚDMLState)Ú
UpdateBase)Ú BindParameter)ÚColumn)Ú_BindProcessorType)Ú
TypeEnginez    \s*SELECTc@sÀeZdZUdZejZejZej    Z
ej Z dZ dZdZdZdZdZejjZdZded<dZded<dZeZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2e3 4d    e5 6¡i¡Z7e3 4e3j8e3 9d
¡e3 9d
¡e3j8e3j8e3j8e3j:d œ¡Z;d ed <dZ<dZ=dZ>dZ?ded<dZ@ded    <dZAded<dZBded<dZCdZDiZEded<dZFdZGdZHdZIdZJdZKdZLded<dZMded<eNjOZPded<dZQded <d!ZRdZSdZTdZUdZVdZWdZXded"<dZYdZZdZ[d#Z\e3j]d$d%d&ddddddde^j_de`ejaƒdf d'd(d)d*d+ddd,d+d-dd.d/œ d0d1„ƒZbece3 dd2d3¡d4d5„ƒƒZee3jfd6d7„ƒZge3jfd8d9„ƒZhdZidZje3jfd:d;œd<d=„ƒZke3jfd>d?„ƒZld@dA„Zme3jfdBdC„ƒZne3jfdDdE„ƒZoecdFdG„ƒZpecdHdI„ƒZqerdJdKdLœdMdN„ƒZsdJdKdLœdOdP„ZterdQdR„ƒZudSd;œdTdU„ZvdVdW„ZwdXdY„ZxdZd[„Zyd\d]„Zzd^d_„Z{d½d`da„Z|dbdcd.dddœdedf„Z}dgdh„Z~didj„Zdkdl„Z€dmd dndoœdpdq„Zdbd dndrœdsdt„Z‚dudv„Zƒdwdx„Z„dydz„Z…d{d|„Z†d}d~„Z‡dd€„Zˆdd‚„Z‰e3jfdƒd„„ƒZŠd…dd†œd‡dˆ„Z‹d…dd†œd‰dŠ„ZŒd‹dŒ„ZddŽ„ZŽdd„Zd‘d’„Zd“d”„Z‘d¾d•d–„Z’d¿d—d˜„Z“dÀd™dš„Z”d›dœ„Z•e3j–ddž„ƒZ—dŸd „Z˜d¡d¢„Z™d£d¤„Zšd¥d¦„Z›d§d¨„Zœd©dª„Zd«d¬„Zžd­d®„ZŸd¯d°„Z d±d²„Z¡d³d´„Z¢dµd¶„Z£d·d¸„Z¤d¹dº„Z¥d»d¼„Z¦dS)ÁÚDefaultDialectz!Default implementation of DialectTFNzOptional[Set[Any]]Úinclude_set_input_sizesÚexclude_set_input_sizesrÚisolation_levelÚdebug)Ú pool_timeoutZechoZ    echo_poolZ pool_recycleZ    pool_sizeZ max_overflowÚfutureúMapping[str, Any]Úengine_config_typesÚdefaulti'z Optional[int]Ú#_user_defined_max_identifier_lengthz Optional[str]Úmax_index_name_lengthÚmax_constraint_name_lengthz<MutableMapping[Type[TypeEngine[Any]], Type[TypeEngine[Any]]]ÚcolspecsÚnamedÚDEFAULTÚboolÚuse_insertmanyvaluesÚ!use_insertmanyvalues_wo_returningr+Ú"insertmanyvalues_implicit_sentinelièÚintÚinsertmanyvalues_page_sizei¼Údefault_schema_namezutf-8)ú1.4aThe :paramref:`_sa.create_engine.empty_in_strategy` keyword is deprecated, and no longer has any effect.  All IN expressions are now rendered using the "expanding parameter" strategy which renders a set of boundexpressions, or an "empty set" SELECT, at statement executiontime.)razÑThe :paramref:`_sa.create_engine.server_side_cursors` parameter is deprecated and will be removed in a future release.  Please use the :paramref:`_engine.Connection.execution_options.stream_results` parameter.)Zempty_in_strategyÚserver_side_cursorszOptional[_ParamStyle]zOptional[IsolationLevel]zOptional[ModuleType]z Literal[True]zOptional[bool]zUnion[_NoArg, int]rBr) Ú
paramstylerMÚdbapiÚimplicit_returningÚsupports_native_booleanÚmax_identifier_lengthÚ label_lengthr_r[Úcompiler_lintingrbÚkwargsc Ks4| r |jst d|¡‚nd|_t|ddƒrBt dd¡tjj    |_
d|_ d|_ ||_ |dk    rd||_n|j dk    rz|j j|_n|j|_|jdk|_ | |¡|_||_t|ddƒ} | dk    rÈtttj|jƒ}n|j}||ƒ|_|_|dk    rì||_||_|jr|j|_||_|
|_|    dk    r|    |_|t j!k    r0||_"dS)    Nz/Dialect %s does not support server side cursorsTZuse_setinputsizesFzoThe dialect-level use_setinputsizes attribute is deprecated.  Please use bind_typing = BindTyping.SETINPUTSIZESú2.0)ZqmarkÚformatÚnumericZnumeric_dollarÚ type_compiler)#Úsupports_server_side_cursorsr!Ú ArgumentErrorrbÚgetattrr#Zwarn_deprecatedrÚ
BindTypingZ SETINPUTSIZESÚ bind_typingÚ
positionalZ_ischemardrcÚdefault_paramstyleÚpreparerÚidentifier_preparerÚ_on_connect_isolation_levelrrr$ÚGenericTypeCompilerrnÚtype_compiler_clsZtype_compiler_instancerfrTrgrhrir[r)ÚNO_ARGr_)ÚselfrcrMrdrerfrgrhr_r[rirbrjZlegacy_tt_callableZ tt_callable©r}úPd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\sqlalchemy/engine/default.pyÚ__init__
sV$ÿ ü
 
    þÿ
 zDefaultDialect.__init__rkz]full_returning is deprecated, please use insert_returning, update_returning, delete_returningcCs|jo|jo|jS©N)Úinsert_returningÚupdate_returningÚdelete_returning©r|r}r}r~Úfull_returningos
ÿýzDefaultDialect.full_returningcCs |jo
|jS)aôDefault implementation for insert_executemany_returning, if not
        otherwise overridden by the specific dialect.
 
        The default dialect determines "insert_executemany_returning" is
        available if the dialect in use has opted into using the
        "use_insertmanyvalues" feature. If they haven't opted into that, then
        this attribute is False, unless the dialect in question overrides this
        and provides some other implementation (such as the Oracle dialect).
 
        ©rr[r„r}r}r~Úinsert_executemany_returning|s z+DefaultDialect.insert_executemany_returningcCs |jo
|jS)aÚDefault implementation for
        insert_executemany_returning_deterministic_order, if not otherwise
        overridden by the specific dialect.
 
        The default dialect determines "insert_executemany_returning" can have
        deterministic order only if the dialect in use has opted into using the
        "use_insertmanyvalues" feature, which implements deterministic ordering
        using client side sentinel columns only by default.  The
        "insertmanyvalues" feature also features alternate forms that can
        use server-generated PK values as "sentinels", but those are only
        used if the :attr:`.Dialect.insertmanyvalues_implicit_sentinel`
        bitflag enables those alternate SQL forms, which are disabled
        by default.
 
        If the dialect in use hasn't opted into that, then this attribute is
        False, unless the dialect in question overrides this and provides some
        other implementation (such as the Oracle dialect).
 
        r†r„r}r}r~Ú4insert_executemany_returning_sort_by_parameter_orderŠszCDefaultDialect.insert_executemany_returning_sort_by_parameter_orderr0©ÚreturncCs"|jdkrt d|›d¡‚|jS)NúDialect z\ does not have a Python DBAPI established and cannot be used for actual database interaction)rdr!ÚInvalidRequestErrorr„r}r}r~Ú loaded_dbapi¤s
 
 
ÿzDefaultDialect.loaded_dbapicCs|jtjjkSr€)rsrrrZ RENDER_CASTSr„r}r}r~Ú_bind_typing_render_casts­sz(DefaultDialect._bind_typing_render_castscCs$t|tƒs t dtt|ƒf¡‚dS)NzáThe argument passed to Dialect.has_table() should be a %s, got %s. Additionally, the Dialect.has_table() method is for internal dialect use only; please use ``inspect(some_engine).has_table(<tablename>>)`` for public API use.)Ú
isinstancerr!rpÚtype)r|Úargr}r}r~Ú_ensure_has_table_connection±s 
 
úÿz+DefaultDialect._ensure_has_table_connectioncCs:|jj dd¡}|dkr2tjd|j|jfddt|ƒS)NÚsupports_statement_cacheaíDialect %s:%s will not make use of SQL compilation caching as it does not set the 'supports_statement_cache' attribute to ``True``.  This can have significant performance implications including some performance degradations in comparison to prior SQLAlchemy versions.  Dialect maintainers should seek to set this attribute to True after appropriate development and testing for SQLAlchemy 1.4 caching support.   Alternatively, this attribute may be set to False which will disable this warning.Zcprf)Úcode)Ú    __class__Ú__dict__Úgetr#ÚwarnÚnameÚdriverrZ)r|Zsscr}r}r~Ú_supports_statement_cache¾s    
÷
õz(DefaultDialect._supports_statement_cachecCst ¡Sr€)ÚweakrefÚWeakKeyDictionaryr„r}r}r~Ú _type_memosÒszDefaultDialect._type_memoscCs|jd|jS)Nú+)r™ršr„r}r}r~Údialect_descriptionÖsz"DefaultDialect.dialect_descriptioncCs|jS)zÊTrue if this dialect supports sane rowcount even if RETURNING is
        in use.
 
        For dialects that don't support RETURNING, this is synonymous with
        ``supports_sane_rowcount``.
 
        )Úsupports_sane_rowcountr„r}r}r~Ú supports_sane_rowcount_returningÚs    z/DefaultDialect.supports_sane_rowcount_returningr<z
Type[Pool])ÚurlrŠcCst|dtjƒS)NZ    poolclass)rqr"Z    QueuePool)Úclsr£r}r}r~Úget_pool_classåszDefaultDialect.get_pool_classcCs
| |¡Sr€)r¥)r|r£r}r}r~Úget_dialect_pool_classész%DefaultDialect.get_dialect_pool_classcCsDd |j d¡dd…¡}zt|dƒWntk
r>YnXdS)NÚ.réÿÿÿÿz
.provision)ÚjoinÚ
__module__ÚsplitÚ
__import__Ú ImportError)r¤Úpackager}r}r~Úload_provisioningìs
z DefaultDialect.load_provisioningzOptional[_ListenerFnType]cs"ˆjdk    r‡fdd„}|SdSdS)Ncsˆ |ˆj¡dSr€)Ú_assert_and_set_isolation_levelrx)Ú
dbapi_connZconn_recr„r}r~Úbuiltin_connect÷sÿz:DefaultDialect._builtin_onconnect.<locals>.builtin_connect)rx)r|r²r}r„r~Ú_builtin_onconnectôs
 z!DefaultDialect._builtin_onconnectcCsÎz| |¡|_Wntk
r*d|_YnXz| |¡|_Wntk
rVd|_YnXz| |jj¡|_Wntk
r†d|_YnX|j    s¢| 
|¡}|r¢||_ |j rÊ|j |j krÊt  d|j |j f¡‚dS)NzQLabel length of %d is greater than this dialect's maximum identifier length of %d)Z_get_server_version_infoÚserver_version_infoÚNotImplementedErrorZ_get_default_schema_namer`Úget_default_isolation_levelÚ
connectionÚdbapi_connectionÚdefault_isolation_levelrTÚ_check_max_identifier_lengthrgrhr!rp)r|r·Zmax_ident_lengthr}r}r~Ú
initializes>ÿ
 ÿ
 ÿ
 
ÿ
þ
þÿzDefaultDialect.initializecCsdSr€r}r„r}r}r~Ú
on_connect$szDefaultDialect.on_connectcCsdS)zôPerform a connection / server version specific check to determine
        the max_identifier_length.
 
        If the dialect's class level max_identifier_length should be used,
        can return None.
 
        .. versionadded:: 1.3.9
 
        Nr}©r|r·r}r}r~rº(s
z+DefaultDialect._check_max_identifier_lengthcCs
| |¡S)aÕGiven a DBAPI connection, return its isolation level, or
        a default isolation level if one cannot be retrieved.
 
        May be overridden by subclasses in order to provide a
        "fallback" isolation level for databases that cannot reliably
        retrieve the actual isolation level.
 
        By default, calls the :meth:`_engine.Interfaces.get_isolation_level`
        method, propagating any exceptions raised.
 
        .. versionadded:: 1.3.22
 
        )Zget_isolation_level©r|r±r}r}r~r¶4sz*DefaultDialect.get_default_isolation_levelcCst ||j¡S)a)Provide a database-specific :class:`.TypeEngine` object, given
        the generic object which comes from the types module.
 
        This method looks for a dictionary called
        ``colspecs`` as a class or instance-level variable,
        and passes on to :func:`_types.adapt_type`.
 
        )r'Z
adapt_typerW)r|Ztypeobjr}r}r~Útype_descriptorDs    zDefaultDialect.type_descriptorcKsP|j||fd|i|—ŽsdS|j||fd|i|—ŽD]}|d|kr4dSq4dS)NÚschemaFr™T)Z    has_tableÚ get_indexes)r|r·Z
table_nameZ
index_namerÀÚkwÚidxr}r}r~Ú    has_indexOsÿÿÿ
 zDefaultDialect.has_indexrÚstr)r·Ú schema_namerÂrŠcKs||j|f|ŽkSr€)Zget_schema_names)r|r·rÆrÂr}r}r~Ú
has_schemaZszDefaultDialect.has_schemacCs&t|ƒ|jkr"t d||jf¡‚dS)Nz7Identifier '%s' exceeds maximum length of %d characters)Úlenrgr!ZIdentifierError)r|Úidentr}r}r~Úvalidate_identifier_s ÿÿz"DefaultDialect.validate_identifiercOs|jj||ŽSr€)rÚconnect)r|ZcargsZcparamsr}r}r~rËfszDefaultDialect.connectcCs| ¡}| |j¡g|gSr€)Ztranslate_connect_argsÚupdateÚquery)r|r£Úoptsr}r}r~Úcreate_connect_argsjs z"DefaultDialect.create_connect_argsr1ÚNone)ÚenginerÎrŠcsJtˆjƒ ˆ¡}|rFt ‡fdd„|Dƒ¡‰t |d¡‡‡fdd„ƒ}dS)Nc3s|]}|ˆ|fVqdSr€r}©Ú.0r™©rÎr}r~Ú    <genexpr>wsz>DefaultDialect.set_engine_execution_options.<locals>.<genexpr>Zengine_connectcsˆ |ˆ¡dSr€)Ú_set_connection_characteristics)r·)rr|r}r~Úset_connection_characteristics{sÿzSDefaultDialect.set_engine_execution_options.<locals>.set_connection_characteristics)ÚsetÚconnection_characteristicsÚ intersectionr#Ú immutabledictr Z listens_for)r|rÑrÎÚsupported_namesr×r})rrÎr|r~Úset_engine_execution_optionsps
ÿÿ
z+DefaultDialect.set_engine_execution_options)r·rÎrŠcs<t|jƒ ˆ¡}|r8t ‡fdd„|Dƒ¡}| ||¡dS)Nc3s|]}|ˆ|fVqdSr€r}rÒrÔr}r~rՈszBDefaultDialect.set_connection_execution_options.<locals>.<genexpr>)rØrÙrÚr#rÛrÖ)r|r·rÎrÜrr}rÔr~Ú set_connection_execution_optionss
ÿÿz/DefaultDialect.set_connection_execution_optionsc    s’‡fdd„| ¡Dƒ}| ¡rNdd„|Dƒ}|rNt dd dd„|Dƒ¡¡‚|jj}|D]\}}}| ˆ||¡qZ|jjj     
t   ˆj |¡¡dS)Ncs g|]\}}|ˆj||f‘qSr})rÙ)rÓr™Úvaluer„r}r~Ú
<listcomp>sÿzBDefaultDialect._set_connection_characteristics.<locals>.<listcomp>cSs g|]\}}}|jr||f‘qSr})Z transactional)rÓr™Úobjrßr}r}r~rà•sþz¨This connection has already initialized a SQLAlchemy Transaction() object via begin() or autobegin; %s may not be altered unless rollback() or commit() is called first.ú, css|]\}}|VqdSr€r})rÓr™rár}r}r~rÕ szADefaultDialect._set_connection_characteristics.<locals>.<genexpr>)ÚitemsZin_transactionr!rŒr©r·r¸Zset_characteristicZ_connection_recordZfinalize_callbackÚappendÚ    functoolsÚpartialÚ_reset_characteristics)    r|r·rZcharacteristic_valuesZ
trans_objsr¸r™Úcharacteristicrßr}r„r~r֍s&
þþüÿ
 ÿz.DefaultDialect._set_connection_characteristicscCs$|D]}|j|}| ||¡qdSr€)rÙZreset_characteristic)r|rr¸Zcharacteristic_namerèr}r}r~rçªs
ÿz%DefaultDialect._reset_characteristicscCsdSr€r}©r|r¸r}r}r~Údo_begin±szDefaultDialect.do_begincCs | ¡dSr€)Úrollbackrér}r}r~Ú do_rollback´szDefaultDialect.do_rollbackcCs | ¡dSr€)Úcommitrér}r}r~Ú    do_commit·szDefaultDialect.do_commitcCs| |¡dSr€)Údo_closerér}r}r~Ú do_terminateºszDefaultDialect.do_terminatecCs | ¡dSr€)Úcloserér}r}r~rï½szDefaultDialect.do_closecCstt d¡j|dƒS)Nr©Údialect)rÅr&ÚselectÚcompiler„r}r}r~Ú_dialect_specific_select_oneÀsz+DefaultDialect._dialect_specific_select_oner9)r¸rŠc Cs z | |¡WS|jjk
rš}zl| ||d¡}|jrzztj|||dddWn*tjk
rx}z
|j    }W5d}~XYnX|rˆWY¢
dS‚W5d}~XYnXdS)NFT)Ú is_disconnectZinvalidate_pool_on_disconnectZ is_pre_ping)
Údo_pingrÚErrorr÷Ú _has_eventsrZ$_handle_dbapi_exception_noconnectionr!ZStatementErrorZconnection_invalidated)r|r¸Úerrr÷Znew_errr}r}r~Ú_do_ping_w_eventÄs$ û
 
zDefaultDialect._do_ping_w_eventcCs,d}| ¡}z| |j¡W5| ¡XdS)NT)rrñÚexecuterö)r|r¸rr}r}r~røÛs 
zDefaultDialect.do_pingcCsdt ddd¡S)z¼Create a random two-phase transaction ID.
 
        This id will be passed to do_begin_twophase(), do_rollback_twophase(),
        do_commit_twophase().  Its format is unspecified.
        z    _sa_%032xrré€)ÚrandomÚrandintr„r}r}r~Ú
create_xidåszDefaultDialect.create_xidcCs| t |¡¡dSr€)rýr&ZSavepointClause©r|r·r™r}r}r~Ú do_savepointîszDefaultDialect.do_savepointcCs| t |¡¡dSr€)rýr&ZRollbackToSavepointClauserr}r}r~Údo_rollback_to_savepointñsz'DefaultDialect.do_rollback_to_savepointcCs| t |¡¡dSr€)rýr&ZReleaseSavepointClauserr}r}r~Údo_release_savepointôsz#DefaultDialect.do_release_savepointc #sHtt|ƒ}tt|jƒ}|j‰ˆdk    s(t‚t|jƒ}|j     d|j
¡}d‰|rhg}    |    |_ ˆj }
ˆj rp|j‰nd}
d}    | |||||
¡D]¾} | V|r‚| |¡} |    dk    s¨t‚ˆj r8| js8ˆj dk} ˆjrê| rÐt‚|     t| t d¡d¡q‚ˆjsôt‚| rˆj ‰‡fdd„| Dƒ‰ndd„| Dƒ‰tˆƒt| jƒkrXt d    t| jƒ›d
tˆƒ›d ¡‚z”| r˜ˆr€‡‡‡fd d „| jDƒ}n‡‡fdd „| jDƒ}nRˆjd‰ˆrԈdrԈd‰‡‡‡fdd „| jDƒ}n‡‡fdd „| jDƒ}Wn>tk
r*}zt d|jd›d¡|‚W5d}~XYnX|     |¡q‚|     | ¡q‚dS)Nr_Frr¨)Úkeycs i|]}t|ˆ d…ƒ|“qSr€)Útuple©rÓÚrow)Ú_nscr}r~Ú
<dictcomp>6szDDefaultDialect._deliver_insertmanyvalues_batches.<locals>.<dictcomp>cSsi|]}|d|“qS)r¨r}rr}r}r~r :szASentinel-keyed result set did not produce correct number of rows z ; produced zP.  Please ensure the sentinel column is fully unique and populated in all cases.cs.g|]&‰ˆt‡fdd„tˆˆjƒDƒƒ‘qS)c3s*|]"\}}|r|ˆ|ƒnˆ|VqdSr€r})rÓZ    _resolverÚ_spk©Ú
parametersr}r~rÕOsþÿúNDefaultDialect._deliver_insertmanyvalues_batches.<locals>.<listcomp>.<genexpr>)rÚzipÚsentinel_param_keys©rÓ)ÚimvÚrows_by_sentinelÚsentinel_value_resolversr r~ràMs õ þüÿzDDefaultDialect._deliver_insertmanyvalues_batches.<locals>.<listcomp>cs(g|] ‰ˆt‡fdd„ˆjDƒƒ‘qS)c3s|]}ˆ|VqdSr€r})rÓr r r}r~rÕ`sÿr)rrr)rrr r~rà^s ú þÿrcsg|]}ˆˆ|ˆƒ‘qSr}r}©rÓr)Ú_sentinel_param_keyÚ_sentinel_value_resolverrr}r~ràqs ûÿÿcsg|]}ˆ|ˆ‘qSr}r}r)rrr}r~rà{sýÿzACan't match sentinel values in result set to parameter sets; key z³ was not found. There may be a mismatch between the datatype passed to the DBAPI driver vs. that which it returns in a result row.  Try using a different datatype, such as integer)rÚDefaultExecutionContextr,ÚcompiledÚ_insertmanyvaluesÚAssertionErrorrZÚeffective_returningÚexecution_optionsr—r_Ú_insertmanyvalues_rowsÚsort_by_parameter_orderÚnum_sentinel_columnsZ_imv_sentinel_value_resolversÚ!_deliver_insertmanyvalues_batchesÚfetchall_for_returningZ is_downgradedZimplicit_sentinelÚextendÚsortedÚoperatorÚ
itemgetterrrÈÚbatchr!rŒÚKeyErrorÚargs)r|rÚ    statementrZgeneric_setinputsizesÚcontextrZ is_returningZ
batch_sizeÚresultr Z    imv_batchÚrowsZcomposite_sentinelZ ordered_rowsZker})r
rrrrrr~r"÷sž
 
ÿÿû
 
 
ÿ
 
ÿÿ     ô ù
 
ÿþÿú
ü
ÿø
z0DefaultDialect._deliver_insertmanyvalues_batchescCs| ||¡dSr€)Ú executemany©r|rr+rr,r}r}r~Údo_executemany”szDefaultDialect.do_executemanycCs| ||¡dSr€©rýr0r}r}r~Ú
do_execute—szDefaultDialect.do_executecCs| |¡dSr€r2)r|rr+r,r}r}r~Údo_execute_no_paramsšsz#DefaultDialect.do_execute_no_paramscCsdS)NFr})r|Úer·rr}r}r~r÷szDefaultDialect.is_disconnectcCspzt| |¡ƒ}Wntk
r(YdSXdd„|Dƒ}||krdtd|j›dtt|ƒ |¡ƒ›ƒ‚t|ƒSdS)NcSsg|]}| dd¡ ¡‘qS)Ú_ú )ÚreplaceÚupper)rÓÚlevelr}r}r~rà¨sz@DefaultDialect._gen_allowed_isolation_levels.<locals>.<listcomp>r‹zi get_isolation_level_values() method should return names as UPPERCASE using spaces, not underscores; got )    ÚlistZget_isolation_level_valuesrµÚ
ValueErrorr™r%rØÚ
differencer)r|r±Z
raw_levelsZnormalized_levelsr}r}r~Ú_gen_allowed_isolation_levels sÿÿz,DefaultDialect._gen_allowed_isolation_levelsc
CsZ| dd¡ ¡}| |¡}|rJ||krJt d|›d|j›dd |¡›¡‚| ||¡dS)Nr6r7zInvalid value z1 for isolation_level. Valid isolation levels for z are râ)r8r9r>r!rpr™r©Zset_isolation_level)r|r±r:Z_allowed_isolation_levelsr}r}r~r°´sÿÿþÿz.DefaultDialect._assert_and_set_isolation_levelcCs| ||j¡dSr€)r°r¹r¾r}r}r~Úreset_isolation_levelÆsÿz$DefaultDialect.reset_isolation_levelcCs\|dkr dS| ¡}| ¡}||kr(|S||kr@|j |¡s@|S||krTt|ddS|SdS)NT)Úquote)Úlowerr9rwÚ_requires_quotesr-©r|r™Z
name_lowerZ
name_upperr}r}r~Únormalize_nameÎsÿþ zDefaultDialect.normalize_namecCsD|dkr dS| ¡}| ¡}||kr(|S||kr@|j |¡s@|}|Sr€)rAr9rwrBrCr}r}r~Údenormalize_nameèsÿþzDefaultDialect.denormalize_namecCs|Sr€r}r½r}r}r~Úget_driver_connectionùsz$DefaultDialect.get_driver_connectioncCstt|ƒ|ƒjtt|ƒjk    Sr€)rqrÚ__code__rJ)r|Úmethodr}r}r~Ú_overrides_defaultüs
ÿÿz!DefaultDialect._overrides_defaultc ks¤g}g}    tj|kr*| |j¡|     |j¡tj|krL| |j¡|     |j¡tj|krb| |j    ¡| 
di¡}
|rŒ|t j krŒ|tj krŒ|} nrg} d|i|–} g} t j |kr´|  |¡t j|krÈ|  |    ¡| D]0}z|  ||f| Ž¡WqÌtk
rúYqÌXqÌ|r t|ƒ}| D]Ž}|r$||kr||f}z ||||fd|i|—ŽfVWnNtjk
r„}z||
krt||
|<W5d}~XYntjk
ršYnXqdS)NÚ unreflectablerÀ)rZTABLEräZget_table_namesZget_temp_table_namesZVIEWZget_view_namesZget_temp_view_namesZMATERIALIZED_VIEWZget_materialized_view_namesÚpoprÚANYrYr$Ú    TEMPORARYrµrØr!ZUnreflectableTableErrorZNoSuchTableError)r|Zsingle_tbl_methodr·ÚkindrÀZ filter_namesZscoperÂZ    names_fnsZtemp_names_fnsrJÚnamesZname_kwÚfnsÚfnÚtablerrûr}r}r~Ú_default_multi_reflectsf 
 
 
  ÿþý  
 
 
 
ÿÿÿþ
 
z%DefaultDialect._default_multi_reflectcKs|j|j|f|ŽSr€)rSZget_table_options©r|r·rÂr}r}r~Úget_multi_table_optionsLs ÿÿz&DefaultDialect.get_multi_table_optionscKs|j|j|f|ŽSr€)rSZ get_columnsrTr}r}r~Úget_multi_columnsQsz DefaultDialect.get_multi_columnscKs|j|j|f|ŽSr€)rSZget_pk_constraintrTr}r}r~Úget_multi_pk_constraintTs ÿÿz&DefaultDialect.get_multi_pk_constraintcKs|j|j|f|ŽSr€)rSZget_foreign_keysrTr}r}r~Úget_multi_foreign_keysYs ÿÿz%DefaultDialect.get_multi_foreign_keyscKs|j|j|f|ŽSr€)rSrÁrTr}r}r~Úget_multi_indexes^sz DefaultDialect.get_multi_indexescKs|j|j|f|ŽSr€)rSZget_unique_constraintsrTr}r}r~Úget_multi_unique_constraintsas ÿÿz+DefaultDialect.get_multi_unique_constraintscKs|j|j|f|ŽSr€)rSZget_check_constraintsrTr}r}r~Úget_multi_check_constraintsfs ÿÿz*DefaultDialect.get_multi_check_constraintscKs|j|j|f|ŽSr€)rSZget_table_commentrTr}r}r~Úget_multi_table_commentks ÿÿz&DefaultDialect.get_multi_table_comment)N)N)N)N)§Ú__name__rªÚ __qualname__Ú__doc__r$r,Ústatement_compilerr*Ú ddl_compilerryrzÚIdentifierPreparerrvZsupports_alterZsupports_commentsZsupports_constraint_commentsZinline_commentsr“Zdiv_is_floordivrrrÚNONErsrKÚ__annotations__rLZdefault_sequence_baserÚexecute_sequence_formatZsupports_schemasZsupports_viewsÚsupports_sequencesÚsequences_optionalÚ"preexecute_autoincrement_sequencesÚsupports_identity_columnsÚpostfetch_lastrowidZfavor_returning_over_lastrowidZ#insert_null_pk_still_autoincrementsr‚rƒZupdate_returning_multifromZdelete_returning_multifromrZcte_follows_insertZsupports_native_enumrfZsupports_native_uuidZreturns_native_bytesZ#non_native_boolean_check_constraintÚsupports_simple_order_by_labelZtuple_in_valuesr#rÛrZIsolationLevelCharacteristicrÙZasintZ bool_or_strZasboolrRZsupports_native_decimalr™rgrTrMrUrVr¡Úsupports_sane_multi_rowcountrWruZsupports_default_valuesZsupports_default_metavalueZdefault_metavalue_tokenZsupports_empty_insertÚsupports_multivalues_insertr[r\r+Z NOT_SUPPORTEDr]r_Zinsertmanyvalues_max_parametersZsupports_is_distinct_fromrorbZsupports_for_update_ofr´r`Zrequires_name_normalizeZis_asyncZ has_terminateZ$_legacy_binary_type_literal_encodingZdeprecated_paramsr)r{r^Z
NO_LINTINGrÚpropertyÚ
deprecatedr…Úmemoized_propertyr‡rˆÚupdate_executemany_returningÚdelete_executemany_returningrrŽr’r›ržr r¢Ú classmethodr¥r¦r¯r³r»r¼rºr¶r¿rÄrÇrÊrËrÏrÝrÞrÖrçrêrìrîrðrïrörürørrrrr"r1r3r4r÷Zmemoized_instancemethodr>r°r?rDrErFrIrSrUrVrWrXrYrZr[r\r}r}r}r~rJpsh
 
ÿùÿ        ÿ
      öò(Rþ 
 
 
 
 
 
 
 
 
 $ 
 
 
    
 
 
 
JrJc@sPeZdZejZejZejZ    ej
Z dZ dZ dZdZdZdZdZdZdZdZdZdS)ÚStrCompileDialectTFN)r]rªr^r$ZStrSQLCompilerr`r*raZStrSQLTypeCompilerrzrbrvrr‚rƒr“rirfrgrhrfrmrkr}r}r}r~rtqsrtc @s$eZdZUdZdZdZdZdZdZe    j
Z de d<dZ de d<dZde d<dZd    e d
<ejZd e d <ejZdZd e d<dZdZdZdZdZdZdZde d<e ¡Zde d<e Z!de d<de d<de d<de d<de d<de d<de d <d!e d"<e"d#ejƒZ#dZ$d$e d%<d&Z%d'e d(<e&dddd d)d*d+œd,d-„ƒZ'e&e(j)fdddd d.d/d0d!d1d*d2œ
d3d4„ƒZ*e&dddd ddd*d5œd6d7„ƒZ+e&dddd d*d8œd9d:„ƒZ,dd;œd<d=„Z-e.d>d?„ƒZ/ej0d@dA„ƒZ1ej0dBdC„ƒZ2ej0dDd;œdEdF„ƒZ3ej0dDd;œdGdH„ƒZ4ej0dIdJ„ƒZ5ddKdL„Z6ej0dMdN„ƒZ7dOdP„Z8dQdR„Z9dSdT„Z:dUdV„Z;dWdX„Z<dYdZ„Z=d[d\„Z>d]d^„Z?d_d`„Z@dadb„ZAdcdd„ZBejCd'd;œdedf„ƒZDdgdh„ZEdidj„ZFdkdl„ZGdmdn„ZHdodp„ZIej0dqdr„ƒZJdsdt„ZKdudv„ZLdwdx„ZMdydz„ZNd{d;œd|d}„ZOd~d„ZPd€d„ZQdZRd‚e dƒ<dŽd…d†„ZSd‡dˆ„ZTd‰dŠ„ZUd‹dŒ„ZVdS)rFrÚ execute_styleNzOptional[Compiled]rzAOptional[Tuple[List[ResultColumnsEntry], bool, bool, bool, bool]]Úresult_column_structzOptional[Sequence[Row[Any]]]Úreturned_default_rowsr6rzOptional[Executable]Úinvoked_statementzOptional[Callable[[str], str]]Ú_translate_colnamezMapping[str, List[str]]Ú_expanded_parametersrÚroot_connectionr?Ú_dbapi_connectionrrórÅÚunicode_statementrrz%List[_MutableCoreSingleExecuteParams]Úcompiled_parametersr5rz&Optional[Sequence[BindParameter[Any]]]Úextracted_parametersrQzOptional[List[Tuple[Any, ...]]]rrr^Ú_num_sentinel_colsr*r)rór·r¸rÚ compiled_ddlrŠc
Cs¢| |¡}||_||_|j|_||_}d|_||_t|ƒ|_|j    rh|j 
di¡}|j j }    |    |j|ƒ|_|j|_ | ¡|_g|_|jr”| ¡g|_n
|jg|_|S)zKInitialize execution context for an ExecutableDDLElement
        construct.TÚschema_translate_map)Ú__new__r{r|rórÚisddlrrÅr}r‚r—rvÚ_render_schema_translatesr+Ú create_cursorrr~rtrerÚ_empty_dict_params)
r¤rór·r¸rrr|rr‚Úrstr}r}r~Ú    _init_ddlÅs2
 
 
ÿÿ
 
z!DefaultExecutionContext._init_ddlr,r2r@r)
rór·r¸rrrrxrÚ    cache_hitrŠc
sØ| |¡}
||
_||
_|j|
_ˆ|
_||
_ˆ|
_|    |
_||
_ˆj    ˆj
ˆj ˆj ˆj f|
_ˆj|
_} ˆj|
_} ˆj|
_} ˆj|
_| s| s| rȈjj}trªt|tƒsªt‚d|
_t|jƒ|
_}tˆjƒ|
_}|rà|j ràd|
_!|rì|rìt‚|sö|rȈj"rÈ| r&|
jj#s&t$ %d|
jj&›d¡‚n¢| rV|j'rV|
jj(sVt$ %d|
jj&›d¡‚nr| rz|
jj)rzˆj*szt$ %d¡‚nN| r¢|
jj+s¢t$ %d|
jj&›d¡‚n&| rÈ|
jj,sÈt$ %d|
jj&›d¡‚|sâˆj-ˆdd    g|
_.nd‡‡fd
d „t/|ƒDƒ|
_.t0|ƒd krF|
jr>ˆj*r>t1j2|
_3ˆj*}|j4d k    rF|j5|
_6nt1j7|
_3ˆj8|
_9|
 :¡|
_;|
jj<sl|
jj=rt|
 >¡ˆj?}|‰ˆj@sŽˆjArÜ|
jBr t$ %d¡‚ˆ C|
j.d¡}|j|
_9|jD|
_EtF|ƒ‰ˆ G|jH¡|jI}nˆjJrî|
jjI}nd }ˆjKr|
j Ldi¡}ˆjMjN}||
j9|ƒ|
_9|
j9|
_ˆjJrzg}|d k    s@t‚|
j.D]*‰‡‡fdd „|Dƒ}| O| P|¡¡qF||
_QnZg}ˆjR‰|
j.D]B‰ˆr¬‡‡‡fdd„ˆDƒ}n‡‡fdd„ˆDƒ}| O|¡qŠ||
_Q|
S)z6Initialize execution context for a Compiled construct.Tr‹z] with current server capabilities does not support INSERT..RETURNING when executemany is usedz} with current server capabilities does not support INSERT..RETURNING with deterministic row ordering when executemany is usedznStatement does not have "insertmanyvalues" enabled, can't use INSERT..RETURNING with executemany in this case.z] with current server capabilities does not support UPDATE..RETURNING when executemany is usedz] with current server capabilities does not support DELETE..RETURNING when executemany is usedF)rÚ escape_namescs"g|]\}}ˆj|d|ˆd‘qS)F)r‹Z _group_numberr)Úconstruct_params)rÓÚgrpÚm)rrr}r~ràYsúüz:DefaultExecutionContext._init_compiled.<locals>.<listcomp>rNzL'literal_execute' or 'expanding' parameters can't be used with executemany()rr‚cs,g|]$}|ˆkr ˆ|ˆ|ƒnˆ|‘qSr}r}©rÓr©Úcompiled_paramsÚflattened_processorsr}r~rà§sþÿcs6i|].}ˆ ||¡|ˆkr*ˆ|ˆ|ƒnˆ|“qSr})r—r)r‘Ú escaped_namesr’r}r~r ¾sû
ýÿz:DefaultExecutionContext._init_compiled.<locals>.<dictcomp>cs.i|]&}||ˆkr"ˆ|ˆ|ƒnˆ|“qSr}r}rrr}r~r Çs
ýÿ)Srƒr{r|rórrxrrŠrZ_result_columnsZ_ordered_columnsZ_textual_ordered_columnsZ_ad_hoc_textualZ_loose_column_name_matchingrvÚisinsertÚisupdateÚisdeleteZ isplaintextÚis_textÚ compile_stater+rrrErÚis_crudrZZ
_returningÚ_is_explicit_returningreÚ_is_implicit_returningZ_supplemental_returningÚ_is_supplemental_returningZfor_executemanyr‡r!rŒr Z_sort_by_parameter_orderrˆr[rrqrrrŒr~Ú    enumeraterÈrÚINSERTMANYVALUESruZsentinel_columnsr!r€Ú EXECUTEMANYÚstringr}r†rÚinsert_prefetchÚupdate_prefetchÚ_process_execute_defaultsÚ_bind_processorsÚliteral_execute_paramsZpost_compile_paramsr/Z#_process_parameters_for_postcompileZparameter_expansionrzÚdictrÌÚ
processorsÚ positiontuprtr‚r—rvr…rärerÚescaped_bind_names)r¤rór·r¸rrrrxrrŠr|ÚiiÚiuZid_Z dml_statementZierZiirrr§Zexpanded_stater¨r‚rˆZcore_positional_parametersZl_paramZcore_dict_parametersZd_paramr})rr‘r“rr’r~Ú_init_compiledòs
û   ÿ
 
 ÿÿþýÿÿþýÿÿÿþÿ ù
 
 
þÿÿ 
ÿÿ
 üÿ
ú     üz&DefaultExecutionContext._init_compiled)rór·r¸rr+rrŠcsÀ| |¡}||_||_|j|_d|_||_|sP|jjrDˆ ¡g|_q’|j    g|_nBt
|dˆjƒrh||_n*t
|dt ƒr~||_n‡fdd„|Dƒ|_t |ƒdkr¦t j|_||_|_| ¡|_|S)z8Initialize execution context for a string SQL statement.Trcsg|]}ˆ |¡‘qSr})re)rÓÚpròr}r~ràòsz;DefaultExecutionContext._init_statement.<locals>.<listcomp>r)rƒr{r|rór—rrtrerr‡rr¦rÈrrŸrur+r}r†r)r¤rór·r¸rr+rr|r}ròr~Ú_init_statementÔs,
 
ÿ  
z'DefaultExecutionContext._init_statement)rór·r¸rrŠcCs2| |¡}||_||_|j|_||_| ¡|_|S)z;Initialize execution context for a ColumnDefault construct.)rƒr{r|rórr†r)r¤rór·r¸rr|r}r}r~Ú _init_defaultþs
 
 
z%DefaultExecutionContext._init_defaultr‰cCs°|jdkrdStƒ}|j}|jj}|dk    s.t‚|tkrDd||fS|tkrZd||fS|tkrpd||fS|tkr†d||fS|t    kr¨d|j
j |j
j ||fSdSdS)Nzraw sqlz no key %.5fszcached since %.4gs agozgenerated in %.5fszcaching disabled %.5fsz,dialect %s+%s does not support caching %.5fsÚunknown) rrrŠZ    _gen_timerÚ NO_CACHE_KEYÚ    CACHE_HITÚ
CACHE_MISSÚCACHING_DISABLEDÚNO_DIALECT_SUPPORTrór™rš)r|ÚnowÚchZgen_timer}r}r~Ú_get_cache_statss*
 ýz(DefaultExecutionContext._get_cache_statscCs|jtjtjfkSr€)rurrŸržr„r}r}r~r/.sþz#DefaultExecutionContext.executemanycCs8|jr|jjSd|jkr,|jj |jd¡S|jjSdS)Nr‚)rrvrrórwZ_with_schema_translater„r}r}r~rw5s
ÿz+DefaultExecutionContext.identifier_preparercCs|jjSr€)r{rÑr„r}r}r~rÑ@szDefaultExecutionContext.enginezOptional[Sequence[Column[Any]]]cCstrt|jtƒst‚|jjSr€)rrrr,rÚ    postfetchr„r}r}r~Úpostfetch_colsDsz&DefaultExecutionContext.postfetch_colscCs8trt|jtƒst‚|jr"|jjS|jr0|jjSdSdS)Nr})    rrrr,rr”r¡r•r¢r„r}r}r~Ú prefetch_colsJsz%DefaultExecutionContext.prefetch_colscCs|j dd¡S)NÚ no_parametersF)rr—r„r}r}r~r¼Usz%DefaultExecutionContext.no_parametersc
Cs²|j}d|jkr0|j di¡}|jj}|||ƒ}|sL|jjrH|j ¡}ni}|j|j    |||d|j     
¡}|dk    r||d}nd}|dk    r®|  |j|j    j dd¡}    |    r®|    |ƒS|S)aExecute a string statement on the current cursor, returning a
        scalar result.
 
        Used to fire off sequences, default phrases, and "select lastrowid"
        types of statements individually or in the context of a parent INSERT
        or UPDATE statement.
 
        r‚)r,Nrr) r{rr—rwr…rórtreZ_cursor_executerZfetchoneÚ_cached_result_processorÚ description)
r|ZstmtÚtype_rÚconnr‚rˆr    ÚrÚprocr}r}r~Ú_execute_scalarYs2
 
ÿ
 
 
ÿz'DefaultExecutionContext._execute_scalarcCs|jSr€)r{r„r}r}r~r·‚sz"DefaultExecutionContext.connectioncCsv|jjs dS|jjrd|j dd¡o`|jr8t|jjtj    ƒp`|j sPt|jjtj
ƒo`|j o`t   |j ¡}n|j dd¡}|S)NFÚstream_resultsT)rórorbrr—rrr+r&Z
SelectableZ
TextClauser}ÚSERVER_SIDE_CURSOR_REÚmatch)r|Zuse_server_sider}r}r~Ú_use_server_side_cursor†s2ÿÿÿþú
óÿz/DefaultExecutionContext._use_server_side_cursorcCsF|jjr4|j dd¡s&|jjr4| ¡r4d|_| ¡Sd|_| ¡SdS)NrÄFT)    rórorr—rbrÇÚ_is_server_sideÚcreate_server_side_cursorÚcreate_default_cursorr„r}r}r~r†£sþ üúù z%DefaultExecutionContext.create_cursorcCs| ¡Sr€)Zfetchall)r|rr}r}r~r#µsz.DefaultExecutionContext.fetchall_for_returningcCs
|j ¡Sr€)r|rr„r}r}r~rʸsz-DefaultExecutionContext.create_default_cursorcCs
tƒ‚dSr€©rµr„r}r}r~rÉ»sz1DefaultExecutionContext.create_server_side_cursorcCsdSr€r}r„r}r}r~Úpre_exec¾sz DefaultExecutionContext.pre_execcCs tdƒ‚dS)Nz,This dialect does not support OUT parametersrË)r|rOr}r}r~Úget_out_parameter_valuesÁsÿz0DefaultExecutionContext.get_out_parameter_valuescCsdSr€r}r„r}r}r~Ú    post_execÆsz!DefaultExecutionContext.post_execcCs| |j|¡S)zÚReturn a 'result processor' for a given type as present in
        cursor.description.
 
        This has a default implementation that dialects can override
        for context-sensitive result type handling.
 
        )r½ró)r|r¿ZcolnameZcoltyper}r}r~Úget_result_processorÉsz,DefaultExecutionContext.get_result_processorcCs|jjS)a return self.cursor.lastrowid, or equivalent, after an INSERT.
 
        This may involve calling special cursor functions, issuing a new SELECT
        on the cursor (or a new one), or returning a stored value that was
        calculated within post_exec().
 
        This function will only be called for dialects which support "implicit"
        primary key generation, keep preexecute_autoincrement_sequences set to
        False, and when no explicit id value was bound to the statement.
 
        The function is called once for an INSERT statement that would need to
        return the last inserted primary key for those dialects that make use
        of the lastrowid concept.  In these cases, it is called directly after
        :meth:`.ExecutionContext.post_exec`.
 
        )rÚ    lastrowidr„r}r}r~Ú get_lastrowidÓsz%DefaultExecutionContext.get_lastrowidcCsdSr€r})r|r5r}r}r~Úhandle_dbapi_exceptionæsz.DefaultExecutionContext.handle_dbapi_exceptioncCs|jjSr€)rÚrowcountr„r}r}r~rÓész DefaultExecutionContext.rowcountcCs|jjSr€)rór¡r„r}r}r~r¡ísz.DefaultExecutionContext.supports_sane_rowcountcCs|jjSr€)rórlr„r}r}r~rlðsz4DefaultExecutionContext.supports_sane_multi_rowcountcCsÐ|j}|js|jr$| ¡}d}}nl| dd¡}|jp@| dd¡}|j}|rf|tjkrft     |j
|j¡}|j pr|j
j }|dkr‚tj }t |||¡}|j}|r¶|js¶tt|ƒjr¶| |¡|j|_|rÌ| |¡}|S)NFÚ    yield_perrÄ)rr™r—Ú_setup_dml_or_text_resultr—rÈÚcursor_fetch_strategyÚ_cursorÚ_DEFAULT_FETCHÚBufferedRowCursorFetchStrategyrÚalternate_cursor_descriptionr¾Z_NO_CURSOR_DQLÚ CursorResultrr„rr,Zhas_out_parametersÚ_setup_out_parametersÚ _soft_closedrÔ)r|Zexec_optr-ZypÚsrÚstrategyÚcursor_descriptionrr}r}r~Ú_setup_result_proxyós< 
 ÿþÿþ
ý
 
z+DefaultExecutionContext._setup_result_proxyc Cs¤tt|jƒ}dd„|j ¡Dƒ}i}tdd„|Dƒ| dd„|Dƒ¡ƒD]P\}}|j}| |j    ¡}| 
|j    j ¡}    |  |j    |    ¡}
|
dk    rŽ|
|ƒ}|||j <qH||_dS)NcSsg|]\}}|jr||f‘qSr})Z
isoutparam©rÓÚparamr™r}r}r~ràsþzADefaultExecutionContext._setup_out_parameters.<locals>.<listcomp>cSsg|] \}}|‘qSr}r}râr}r}r~rà%scSsg|] \}}|‘qSr}r}râr}r}r~rà's)rr,rÚ
bind_namesrãrrÍrZ dialect_implróZget_dbapi_typerÚresult_processorrÚout_parameters) r|r-rZout_bindparamsræÚ    bindparamZ    raw_valuer¿Z    impl_typeZ
dbapi_typerår}r}r~rÜs, þ  ÿþ  ÿ z-DefaultExecutionContext._setup_out_parameterscCsÂtt|jƒ}|j}|jrP|jtjkr@|jr@t    j
|j |j |j d}|jrP| ¡|_|jrp|t    jkrpt     |j |j¡}|j p||j j}|dkrŽt    j}n&|jr´|jtjks¤t‚|d|j …}t     |||¡}|jr*|jr| ¡}||_| ||¡|_|jjsút‚|j r| !|¡n| "¡n|j#s¾| "¡n”|jr‚| ¡}|rF||_t$|ƒ|_%d|_&|j rj| !|¡n| "¡|jjs¾t‚n<|jjs¢|j%d|_&| "¡n|j's²|j(r¾|j%d|_&|S)N)Zinitial_bufferZalternate_descriptionrT))rr,rrÖr”rurržrr×Z FullyBufferedCursorFetchStrategyrrrÚrjÚ_setup_ins_pk_from_lastrowidÚinserted_primary_key_rowsrÈrØrÙrr¾Z_NO_CURSOR_DMLr€rrÛr›ÚallrwÚ%_setup_ins_pk_from_implicit_returningÚ    _metadataZ returns_rowsrœÚ_rewindZ _soft_closeršrÈrÓÚ _has_rowcountr•r–)r|rrßràr-r.r}r}r~rÕ7s‚ 
ÿþú
ÿÿ ÿÿÿ
ÿ  
 
 
 
 
z1DefaultExecutionContext._setup_dml_or_text_resultcCs| ¡Sr€)Ú_setup_ins_pk_from_emptyr„r}r}r~ré¤sz1DefaultExecutionContext.inserted_primary_key_rowscCs(tt|jƒj}| ¡}|||jdƒgS)Nr)rr,rÚ+_inserted_primary_key_from_lastrowid_getterrÑr~)r|ÚgetterrÐr}r}r~rè«s ÿz4DefaultExecutionContext._setup_ins_pk_from_lastrowidcs"tt|jƒj‰‡fdd„|jDƒS)Ncsg|]}ˆd|ƒ‘qSr€r})rÓrã©rñr}r~rà¶szDDefaultExecutionContext._setup_ins_pk_from_empty.<locals>.<listcomp>)rr,rrðr~r„r}ròr~rï²s
ÿz0DefaultExecutionContext._setup_ins_pk_from_emptycs4|sgStt|jƒj‰|j}‡fdd„t||ƒDƒS)Ncsg|]\}}ˆ||ƒ‘qSr}r})rÓr    rãròr}r~ràÂszQDefaultExecutionContext._setup_ins_pk_from_implicit_returning.<locals>.<listcomp>)rr,rZ+_inserted_primary_key_from_returning_getterr~r)r|r-r.r‘r}ròr~rë¸sÿ
ÿz=DefaultExecutionContext._setup_ins_pk_from_implicit_returningcCs|js |jottt|jƒjƒSr€)r”r•rZrr,rr¹r„r}r}r~Úlastrow_has_defaultsÆs ÿz,DefaultExecutionContext.lastrow_has_defaultsz0Optional[List[Tuple[str, Any, TypeEngine[Any]]]]cs„|js |jrdStt|jƒ‰ˆ ¡}|dkr0dS|j}|jr^t|ƒ}|j     
||j |j |j |¡ˆjrlˆj‰nd‰|jr‡fdd„ˆjpˆdDƒ}ndd„ˆj ¡Dƒ}g}|D]Ò\}‰ˆˆjkrÀq¬||jkrFtˆjƒrtˆjjƒ‰|ˆ‰| ‡‡‡‡fdd„t|j|ƒDƒ¡n.| ˆd¡‰| ‡‡‡fdd„|j|Dƒ¡q¬| ˆd¡‰ˆdk    rhˆ ||¡n|}| |ˆˆjf¡q¬|S)    a–Given a cursor and ClauseParameters, prepare arguments
        in order to call the appropriate
        style of ``setinputsizes()`` on the cursor, using DB-API types
        from the bind parameter's ``TypeEngine`` objects.
 
        This method only called by those dialects which set
        the :attr:`.Dialect.bind_typing` attribute to
        :attr:`.BindTyping.SETINPUTSIZES`.   cx_Oracle is the only DBAPI
        that requires setinputsizes(), pyodbc offers it as an option.
 
        Prior to SQLAlchemy 2.0, the setinputsizes() approach was also used
        for pg8000 and asyncpg, which has been changed to inline rendering
        of casts.
 
        Ncsg|]}|ˆj|f‘qSr})Zbindsr)rr}r~rà÷sÿzDDefaultExecutionContext._prepare_set_input_sizes.<locals>.<listcomp>r}cSsg|]\}}||f‘qSr}r})rÓrçrr}r}r~ràüsÿc3sD|]<\}}ˆdk    rˆ ||¡n|ˆ|ˆˆjj|ˆfVqdSr€)r—rÚtypes)rÓrÃÚ    paramname)rçÚdbtypesr©Únumr}r~rÕ
s
úÿ
ùzCDefaultExecutionContext._prepare_set_input_sizes.<locals>.<genexpr>c3s.|]&}ˆdk    rˆ ||¡n|ˆˆjfVqdSr€)r—r)rÓrõ)rçÚdbtyper©r}r~rÕs
úÿù)r„r—rr,rZ_get_set_input_sizes_lookuprórúr¦ÚdispatchZdo_setinputsizesrr+rr©rtr¨rärãr¥rzr(rrÈrôr$rr—rä)r|Z
inputsizesrórãZgeneric_inputsizesrZ escaped_namer})rçrrørör©r÷r~Ú_prepare_set_input_sizesËsh  ÿ
þþ 
 
ÿö
 
ÿý
ÿz0DefaultExecutionContext._prepare_set_input_sizescCsF|jr| ||¡S|jr(||_| |¡S|jr<| |||¡S|jSdSr€)Z is_sequenceZ fire_sequenceÚ is_callableÚcurrent_columnr‘Zis_clause_elementÚ_exec_default_clause_element)r|ÚcolumnrSr¿r}r}r~Ú _exec_default5s 
z%DefaultExecutionContext._exec_defaultcs|jst |j|¡}n|j}t |¡j|jd}| ¡‰|j‰|j    rh|j 
‡‡fdd„|j p^dDƒ¡}n‡‡fdd„ˆDƒ}|j t |ƒ||dS)Nròcs,g|]$}|ˆkr ˆ|ˆ|ƒnˆ|‘qSr}r}r©r‘r§r}r~ràUsþÿzHDefaultExecutionContext._exec_default_clause_element.<locals>.<listcomp>r}cs.i|]&}||ˆkr"ˆ|ˆ|ƒnˆ|“qSr}r}rrr}r~r ]s
ýÿzHDefaultExecutionContext._exec_default_clause_element.<locals>.<dictcomp>r )Z _arg_is_typedr&Z type_coercer‘rôrõrórŒr¤rtrer¨rÃrÅ)r|rþrSr¿Z default_argrrr}rr~rýDs( üÿ     üÿz4DefaultExecutionContext._exec_default_clause_elementz"Optional[_CoreSingleExecuteParams]Úcurrent_parametersTcsòz|j‰|j}Wntk
r.t d¡‚YnX|dk    s<t‚ˆdk    sHt‚tdtt|jƒj    ƒ}|dk    sht‚|rêt
  |¡rê|j rê|j r |jd‰|jjˆ|ji}n|jˆ|ji}d‰|jdk    sÂt‚|j ¡}| ‡‡fdd„|Dƒ¡|SˆSdS)aiReturn a dictionary of parameters applied to the current row.
 
        This method can only be used in the context of a user-defined default
        generation function, e.g. as described at
        :ref:`context_default_functions`. When invoked, a dictionary is
        returned which includes entries for each column/value pair that is part
        of the INSERT or UPDATE statement. The keys of the dictionary will be
        the key value of each :class:`_schema.Column`,
        which is usually synonymous
        with the name.
 
        :param isolate_multiinsert_groups=True: indicates that multi-valued
         INSERT constructs created using :meth:`_expression.Insert.values`
         should be
         handled by returning only the subset of parameters that are local
         to the current column default invocation.   When ``False``, the
         raw parameters of the statement are returned including the
         naming convention used in the case of multi-valued INSERT.
 
        .. versionadded:: 1.2  added
           :meth:`.DefaultExecutionContext.get_current_parameters`
           which provides more functionality over the existing
           :attr:`.DefaultExecutionContext.current_parameters`
           attribute.
 
        .. seealso::
 
            :attr:`.DefaultExecutionContext.current_parameters`
 
            :ref:`context_default_functions`
 
        zdget_current_parameters() can only be invoked in the context of a Python side column default functionNrDrrc3s"|]}|ˆd|ˆffVqdS)z%s_m%dNr}r©Úindexrr}r~rÕ½szADefaultExecutionContext.get_current_parameters.<locals>.<genexpr>)rrüÚAttributeErrorr!rŒrrr,rr˜r%r”Z_has_multi_parametersZ_is_multiparam_columnrÚoriginalrZ_dict_parametersÚkeysrÌ)r|Zisolate_multiinsert_groupsrþr˜Údrr}rr~Úget_current_parameters€s@!
ÿ
   ÿ ÿþý
 
ÿz.DefaultExecutionContext.get_current_parameterscCs$|jdkrdS| ||j|j¡SdSr€)rSrÿr©r|rþr}r}r~Úget_insert_defaultÄs
z*DefaultExecutionContext.get_insert_defaultcCs$|jdkrdS| ||j|j¡SdSr€)Zonupdaterÿrr    r}r}r~Úget_update_defaultÊs
z*DefaultExecutionContext.get_update_defaultc sÞttˆjƒ}|j‰d}|jr4‡‡fdd„|jDƒ}n"|jrR‡‡fdd„|jDƒ}ng}ˆjD]x}|ˆ_|D]h\}}\}}}    }
} |
r”|||<|d7}qj|r¢|||<qj|    rº|ˆ_|ˆƒ||<qj| |ƒ} | dk    rj| ||<qjq\ˆ`dS)Nrcs g|]}|ˆ|ƒ|jˆjf‘qSr})Z_default_description_tupler
©rÓÚc©Z
key_getterr|r}r~ràØs ûüzEDefaultExecutionContext._process_execute_defaults.<locals>.<listcomp>cs g|]}|ˆ|ƒ|jˆjf‘qSr})Z_onupdate_description_tupler r rr}r~ràâs ûür)    rr,rZ_within_exec_param_key_getterr¡r¢r~rrü) r|rZsentinel_counterZ prefetch_recsrãr Z    param_keyr‘Z    is_scalarrûZ is_sentinelÚfallbackÚvalr}rr~r£Ðs@  ù     ù
 
û
 
 
 z1DefaultExecutionContext._process_execute_defaults)N)T)Wr]rªr^r”r•r–r™r—r„rZEXECUTErurdrrvrwr#Ú
EMPTY_DICTrr×rØrÖrxr›ršrœrÈrÝrîryrÛrzr±rŠrr‡rr€rsr‰rr´r¬r®r¯r¸rnr/rprwrÑrºr»r¼rÃr·rÇr†r#rÊrÉrÌrÍrÎrÏrÑrÒZnon_memoized_propertyrÓr¡rlrárÜrÕrérèrïrërórúrÿrýrrr
r r£r}r}r}r~rŠs¸
 þ
      , ö$b)
 
 
 
 
 
 
)
 
'm
j# 
Dr)mr_Ú
__future__rrår&rÿÚreÚtimerÚtypingrrrrrr    r
r r r rrrrrrœÚrrr×rÚbaserrrrrrZ
reflectionrrr r!r"r#Zsqlr$r%r&r'Z sql._typingr(Zsql.baser)Z sql.compilerr*r+r,Z sql.elementsr-Z util.typingr.r/rôr0r1r2r3r4r5r6r7r8r9r:r    r;r£r<r=r>r?r@rArBrCZsql.dmlrDrErFZ
sql.schemarGZ sql.type_apirHrIrõÚIÚUNICODErÅr;r²r³r´r±rµrJrtrZexecution_ctx_clsr}r}r}r~Ú<module>    sÔ                                                                          ú