U a @sdZddlZddlZddlZddlZddlZddlmZddlmZ ddlm Z ddl m Z dd lm Z dd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZedejejBZedejejBZedZedZ edZ!edZ"edZ#Gddde j$Z%Gddde&Z'Gddde'ej(Z)Gdd d e'ej*Z+Gd!d"d"e'ej,Z-Gd#d$d$e%Z.Gd%d&d&e j/Z0e0e%_1dS)'aDefault 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. N)characteristics)cursor) interfaces) Connection)event)exc)pool) processors)types)util)compiler) expression) quoted_namez-\s*(?:UPDATE|INSERT|CREATE|DELETE|DROP|ALTER)z \s*SELECT CACHE_HIT CACHE_MISSCACHING_DISABLED NO_CACHE_KEYNO_DIALECT_SUPPORTc @sBeZdZdZejZejZej Z ej Z dZ dZdZdZdZdZeZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$e%&de'(iZ)e%&de%*dfde%j+fd e%*d fd e%*d fd e%j+fd e%j+fde%j+fde%j,fgZ-dZ.e%j/r dZ0dZ1e2j3j4Z5dZ6ndZ0dZ1e2j3j7Z5dZ6dZ8dZ9dZ:dZ;dZdZ?iZ@dZAdZBdZCdZDdZEdZFdZGdZHdZIdZJdZKdZLdZMdZNe%&ZOdZPeQZQeRZReSZSeTZTeUZUe%jVddddddddddddddeWejXdf ddZYddZZe%j[d d!Z\e%j[d"d#Z]e^d$d%Z_e^d&d'Z`ead(d)Zbd*d+Zcead,d-Zdd.d/Zed0d1Zfd2d3Zgd4d5Zhdnd6d7Zid8d9Zjd:d;Zkdodd?Zmd@dAZndBdCZodDdEZpdFdGZqdHdIZrdJdKZsdLdMZtdNdOZudPdQZvdRdSZwe%j[dTdUZxdVdWZydXdYZzdZd[Z{d\d]Z|d^d_Z}dpd`daZ~dqdbdcZdrdddeZdfdgZdhdiZdjdkZdldmZdS)sDefaultDialectz!Default implementation of DialectTFrisolation_levelconvert_unicodeforce pool_timeoutZechodebugZ echo_poolZ pool_recycleZ pool_sizeZ max_overflowfutureN use_encodingdefaulti'named)z1.3zThe :paramref:`_sa.create_engine.convert_unicode` parameter and corresponding dialect-level parameters are deprecated, and will be removed in a future release. Modern DBAPIs support Python Unicode natively and this parameter is unnecessary.)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.)r!zThe :paramref:`_sa.create_engine.case_sensitive` parameter is deprecated and will be removed in a future release. Applications should work with result column names in a case sensitive fashion.)r!zThe :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.)rZempty_in_strategycase_sensitiveserver_side_cursorszutf-8c KsBt|ddstd|j| r<|js6td|nd|_||_||_ d|_ d|_ ||_ |dk rj||_ n|j dk r|j j |_ n|j|_ |dk r||_|j dk|_ |||_|||_|dk r||_||_||_|jr|j|_| |_| |_|jdkrt||_n|jdk r"t|j|_t|j |_t|j |_ dS)NZported_sqla_06Tz2The %s dialect is not yet ported to the 0.6 formatz/Dialect %s does not support server side cursorsF)Zqmarkformatnumericr)!getattrr warnnamesupports_server_side_cursorsr ArgumentErrorr#rencoding positionalZ_ischemadbapi paramstyledefault_paramstyleimplicit_returningprepareridentifier_preparer type_compilersupports_native_booleanr"#_user_defined_max_identifier_lengthmax_identifier_length label_lengthcompiler_lintingdescription_encodingr Zto_unicode_processor_factory_description_decodercodecs getencoder_encoder_decoder) selfrr+r.r-r0r"r4r6r7r8r#kwargsr r ZC:\Users\vtejo\AppData\Local\Temp\pip-unpacked-wheel-nyjtotrf\sqlalchemy\engine\default.py__init__s`3        zDefaultDialect.__init__cCs$t|ts tdtt|fdS)NzThe 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(>)`` for public API use.) isinstancerr r*type)r?argr r rA_ensure_has_table_connectionRs   z+DefaultDialect._ensure_has_table_connectioncCs|jjdddkS)Nsupports_statement_cacheFT) __class____dict__getr?r r rA_supports_statement_cache_sz(DefaultDialect._supports_statement_cachecCstSN)weakrefWeakKeyDictionaryrKr r rA _type_memosfszDefaultDialect._type_memoscCs|jd|jS)N+)r(driverrKr r rAdialect_descriptionjsz"DefaultDialect.dialect_descriptioncCs|jS)zTrue 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_rowcountrKr r rA supports_sane_rowcount_returningns z/DefaultDialect.supports_sane_rowcount_returningcCst|dtjS)NZ poolclass)r&r Z QueuePool)clsurlr r rAget_pool_classyszDefaultDialect.get_pool_classcCs ||SrM)rX)r?rWr r rAget_dialect_pool_class}sz%DefaultDialect.get_dialect_pool_classcCsDd|jddd}zt|dWntk r>YnXdS)N.rz .provision)join __module__split __import__ ImportError)rVpackager r rAload_provisionings z DefaultDialect.load_provisioningcCsz|||_Wntk r*d|_YnXz|||_Wntk rVd|_YnXz||j|_Wntk rd|_YnX|jt j j krt j rtd|||_|jdk r||rd|_|_|js||}|r||_|jr|j|jkrtd|j|jfdS)Nz*RETURNS_UNKNOWN is unsupported in Python 3zQLabel length of %d is greater than this dialect's maximum identifier length of %d)Z_get_server_version_infoserver_version_infoNotImplementedErrorZ_get_default_schema_namedefault_schema_nameget_default_isolation_level connectiondefault_isolation_levelreturns_unicode_stringssqltypesStringRETURNS_UNKNOWNr py3kr InvalidRequestError_check_unicode_returnsr9_check_unicode_descriptionr:r5_check_max_identifier_lengthr6r7r*)r?rgZmax_ident_lengthr r rA initializesX          zDefaultDialect.initializecCsdSrMr rKr r rA on_connectszDefaultDialect.on_connectcCsdS)zPerform 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?rgr r rArqs z+DefaultDialect._check_max_identifier_lengthcCs ||S)aGiven 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_levelr?Z dbapi_connr r rArfsz*DefaultDialect.get_default_isolation_levelcstjrjstjntjjr*nifddtt dt dtt dt dg}|r|||7}fdd|D}| dd grt jjS|dhkrt jjSt jjSdS) Nc st|jd}z,j}|||}|Wn8tj k rz}zt d|WYdSd}~XYnXt |dt j SdS)Ndialectz2Exception attempting to detect unicode returns: %rFr)rselectcompilergr_cursor_executefetchonecloser Z DBAPIErrorr r'rC text_type)test statementrrowde)cast_torg parametersr?r rA check_unicodes  z.check_unicodez'test plain returns'<z'test unicode returns'csh|] }|qSr r ).0r})rr rA sz8DefaultDialect._check_unicode_returns..TF)r py2ksupports_unicode_statements binary_typer|r,execute_sequence_formatrcastliteral_columnrjZVARCHARZUnicode issupersetrkZRETURNS_CONDITIONALRETURNS_UNICODEZ RETURNS_BYTES)r?rgZadditional_teststestsresultsr )rrrgrr?rAros2   z%DefaultDialect._check_unicode_returnscCsvtjr|jstj}ntj}|j}zB||t t d dj |dt|jddtjWS|XdS)Nz'x'Z some_labelrur)r rrrr|rgrr{executerrwrlabelrxrC description)r?rgrrr r rArps   z)DefaultDialect._check_unicode_descriptioncCst||jS)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`. )rjZ adapt_typecolspecs)r?Ztypeobjr r rAtype_descriptor+s zDefaultDialect.type_descriptorcCs@|j|||dsdS|j|||dD]}|d|kr$dSq$dS)N)schemaFr(T)Z has_tableZ get_indexes)r?rgZ table_nameZ index_nameridxr r rA has_index6s  zDefaultDialect.has_indexcCs&t||jkr"td||jfdS)Nz7Identifier '%s' exceeds maximum length of %d characters)lenr6r ZIdentifierError)r?identr r rAvalidate_identifier?s z"DefaultDialect.validate_identifiercOs|jj||SrM)r-connect)r?ZcargsZcparamsr r rArFszDefaultDialect.connectcCs|}||jg|gSrM)Ztranslate_connect_argsupdatequery)r?rWoptsr r rAcreate_connect_argsJs z"DefaultDialect.create_connect_argscsJtj}|rFtfdd|Dt|dfdd}dS)Nc3s|]}||fVqdSrMr rr(rr rA Usz>DefaultDialect.set_engine_execution_options..Zengine_connectcs|s|dSrM)_set_connection_characteristics)rgbranch)rr?r rAset_connection_characteristicsYs zSDefaultDialect.set_engine_execution_options..set_connection_characteristics)setconnection_characteristics intersectionr immutabledictrZ listens_for)r?enginersupported_namesrr )rrr?rAset_engine_execution_optionsPs  z+DefaultDialect.set_engine_execution_optionscs<t|j}|r8tfdd|D}|||dS)Nc3s|]}||fVqdSrMr rrr rAreszBDefaultDialect.set_connection_execution_options..)rrrr rr)r?rgrrrr rrA set_connection_execution_options`s z/DefaultDialect.set_connection_execution_optionsc sfdd|D}|rtdd|D}|rt|jrVtdddd|Dntddd d|D|jj}|D]\}}}| ||q|jj j t j|dS) Ncs g|]\}}|j||fqSr )r)rr(valuerKr rA lszBDefaultDialect._set_connection_characteristics..cSs g|]\}}}|jr||fqSr )Z transactional)rr(objrr r rArrsz\This connection has already begun a transaction; %s may not be altered until transaction endz, css|]\}}|VqdSrMr rr(rr r rAr|szADefaultDialect._set_connection_characteristics..zConnection is already established with a Transaction; setting %s may implicitly rollback or commit the existing transaction, or have no effect until next transactioncss|]\}}|VqdSrMr rr r rArs)itemsZin_transaction _is_futurer rnr\r r'rgZset_characteristicZ_connection_recordZfinalize_callbackappend functoolspartial_reset_characteristics) r?rgrZcharacteristic_valuesZ trans_objsdbapi_connectionr(characteristicrr rKrArjs2    z.DefaultDialect._set_connection_characteristicscCs$|D]}|j|}|||qdSrM)rZreset_characteristic)r?rrZcharacteristic_namerr r rArs z%DefaultDialect._reset_characteristicscCsdSrMr r?rr r rAdo_beginszDefaultDialect.do_begincCs |dSrM)rollbackrr r rA do_rollbackszDefaultDialect.do_rollbackcCs |dSrM)commitrr r rA do_commitszDefaultDialect.do_commitcCs |dSrM)r{rr r rAdo_closeszDefaultDialect.do_closecCsttdj|dS)Nrru)strrrwrxrKr r rA_dialect_specific_select_onesz+DefaultDialect._dialect_specific_select_onec Csvd}z(|}z||jW5|XWn@|jjk rl}z||||rZWY dSW5d}~XYnXdSdS)NFT)rr{rrr-Error is_disconnect)r?rrerrr r rAdo_pings zDefaultDialect.do_pingcCsdtdddS)zCreate 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)randomrandintrKr r rA create_xidszDefaultDialect.create_xidcCs|t|dSrM)rrZSavepointClauser?rgr(r r rA do_savepointszDefaultDialect.do_savepointcCs|t|dSrM)rrZRollbackToSavepointClauserr r rAdo_rollback_to_savepointsz'DefaultDialect.do_rollback_to_savepointcCs|t|dSrM)rrZReleaseSavepointClauserr r rAdo_release_savepointsz#DefaultDialect.do_release_savepointcCs|||dSrM) executemanyr?rr~rcontextr r rAdo_executemanyszDefaultDialect.do_executemanycCs|||dSrMrrr r rA do_executeszDefaultDialect.do_executecCs||dSrMr)r?rr~rr r rAdo_execute_no_paramssz#DefaultDialect.do_execute_no_paramscCsdS)NFr )r?ergrr r rArszDefaultDialect.is_disconnectcCs|||jdSrM)Zset_isolation_levelrhrtr r rAreset_isolation_levelsz$DefaultDialect.reset_isolation_levelcCsx|dkr dStjr(t|tr(||j}|}|}||krD|S||kr\|j |s\|S||krpt |ddS|SdS)NT)quote) r rrCrdecoder+lowerupperr2_requires_quotesrr?r(Z name_lowerZ name_upperr r rAnormalize_names$   zDefaultDialect.normalize_namecCsf|dkr dS|}|}||kr(|S||kr@|j|s@|}tjrb|jsZ||j}nt |}|SrM) rrr2rr rsupports_unicode_bindsencoder+unicoderr r rAdenormalize_names"zDefaultDialect.denormalize_name)N)N)N)N)N)__name__r] __qualname____doc__rZ SQLCompilerstatement_compiler DDLCompiler ddl_compilerZGenericTypeCompilerr3IdentifierPreparerr1Zsupports_alterZsupports_commentsZinline_commentsZuse_setinputsizesrGZdefault_sequence_basetuplerZsupports_schemasZsupports_viewssupports_sequencessequences_optional"preexecute_autoincrement_sequencessupports_identity_columnspostfetch_lastrowidr0Zfull_returningZinsert_executemany_returningZcte_follows_insertZsupports_native_enumr4Z#non_native_boolean_check_constraintsupports_simple_order_by_labelZtuple_in_valuesr rrZIsolationLevelCharacteristicrZ bool_or_strZasintZasboolZengine_config_typesZsupports_native_decimalrmrrrjrkrrir9rlr(r6r5rZmax_index_name_lengthZmax_constraint_name_lengthrTsupports_sane_multi_rowcountrr/Zsupports_default_valuesZsupports_default_metavalueZsupports_empty_insertsupports_multivalues_insertZsupports_is_distinct_fromr)r#Zsupports_for_update_ofrcreZconstruct_argumentsZrequires_name_normalizeZreflection_optionsZdbapi_exception_translation_mapZis_asyncrrrrrZdeprecated_paramsintZ NO_LINTINGrBrFmemoized_propertyrLrPpropertyrSrU classmethodrXrYrbrrrsrqrfrorprrrrrrrrrrrrrrrrrrrrrrrrrrr r r rAr3s&    *  # F       3  ;  &     rc@seZdZddZdS)_RendersLiteralcCs dd}|S)NcSsd|S)Nz'%s'r )rr r rAprocesssz2_RendersLiteral.literal_processor..processr )r?rvrr r rAliteral_processorsz!_RendersLiteral.literal_processorN)rr]rrr r r rArsrc@s eZdZdS) _StrDateTimeNrr]rr r r rArsrc@s eZdZdS)_StrDateNrr r r rArsrc@s eZdZdS)_StrTimeNrr r r rArsrc@s^eZdZejZejZejZ ej Z dZ dZ dZdZdZdZdZdZdZejeejeejeiZdS)StrCompileDialectTFN)rr]rrZStrSQLCompilerrrrZStrSQLTypeCompilerr3rr1rGrrrrr0r4rrrjDateTimerDaterTimerrr r r rAr#s(rc@s.eZdZdZdZdZdZdZdZdZ dZ dZ dZ dZ eZdZdZejZdZdZdZdZdZdZdZdZeZeZ e!ddZ"e!e#fddZ$e!ddZ%e!d d Z&d d Z'ej(d dZ)ej(ddZ*ej(ddZ+ej(ddZ,ej(ddZ-ej(ddZ.ej(ddZ/d\ddZ0e1ddZ2dd Z3d!d"Z4d#d$Z5d%d&Z6d'd(Z7d)d*Z8d+d,Z9d-d.Z:d/d0Z;d1d2Zd7d8Z?d9d:Z@d;d<ZAd=d>ZBd?d@ZCej(dAdBZDdCdDZEdEdFZFdGdHZGdIdJZHdKdLZIdMdNZJdOdPZKdZLd]dRdSZMdTdUZNdVdWZOdXdYZPdZd[ZQdS)^DefaultExecutionContextFNc Cs||}||_||_|j|_||_}d|_||_|jpF|jdd|_ t ||_ |j r|jdi}|jj} | |j ||_ |js||j d|_n|j |_||_g|_|jr|g|_nig|_|S)z8Initialize execution context for a DDLElement construct.T future_resultFschema_translate_mapr)__new__root_connection_dbapi_connectionrvcompiledisddlexecution_optionsrrJ_is_future_resultr r|unicode_statementrr1_render_schema_translatesrr=r~ create_cursorrcompiled_parametersr,rr) rVrvrgrr Z compiled_ddlr?r rrstr r rA _init_ddles<     z!DefaultExecutionContext._init_ddlc s||} || _|| _|j| _| _|| _| _| | _|| _|j pN| j dd| _ j j jjf| _j| _j| _j| _j| _| js| js| jrd| _tjj| _tjojj | _|sڈjdg| _n(fddt|D| _t |dk| _!t"j#rt"$j%| _&nj%| _&| '| _(| jj)s@| jj*rZ| j!rR| +n| ,j-j.spj/r| j!rt01d2| jd } | j| _&| j3| _4t56| j7| j8} nj9r| jj8} j:r| j d i} j;j<}|| j&| | _&|j=s| j&>| jj?| _n| j&| _g}j9r^| jD]*fd d| D}|@|A|q0n^|j= }|rr|jB| jD]B|rfd d D}nfdd D}|@|qx|A|| _C| S)z6Initialize execution context for a Compiled construct.rFT)extracted_parameterscs g|]\}}j||dqS))Z _group_numberr)construct_params)rgrpm)r rr rArs z:DefaultExecutionContext._init_compiled..rzL'literal_execute' or 'expanding' parameters can't be used with executemany()rrcs,g|]$}|kr ||n|qSr r rkeycompiled_paramsr r rArscs6i|].}|d|kr*||n|qSrr r)rencoderr r rA *s  z:DefaultExecutionContext._init_compiled..cs.i|]&}||kr"||n|qSr r rrr rAr1s )Drrrrvrinvoked_statementr  cache_hitr rrJr Z_result_columnsZ_ordered_columnsZ_textual_ordered_columnsZ_loose_column_name_matchingresult_column_structisinsertisupdateisdeleteZ isplaintextis_textis_crudboolr~Z _returning_is_explicit_returning returning_is_implicit_returningrr enumeraterrr rr|stringr rrinsert_prefetchupdate_prefetch_process_executemany_defaults_process_executesingle_defaults_bind_processorsliteral_execute_paramsZpost_compile_paramsr rnZ#_process_parameters_for_postcompileZparameter_expansion_expanded_parametersdictrr positiontupr,rr1rrrr+rrr=r)rVrvrgrr r rrrrr?Zexpanded_stater4rrparamrr )r rrrr rA_init_compileds            z&DefaultExecutionContext._init_compiledcs||}||_||_|j|_d|_||_|jp<|jdd|_|sd|jj rZ g|_ qig|_ ndt |dj r|||_ nLt |dt rjr||_ qȇfdd|Dpig|_ nfdd|D|_ t|dk|_jst |tjr||_|d|_n ||_|_||_|S) z8Initialize execution context for a string SQL statement.TrFrcs g|]fddDqS)cs i|]}|d|qSr)r=)rk)drvr rArcs zFDefaultExecutionContext._init_statement...r )rru)r8rArbsz;DefaultExecutionContext._init_statement..csg|]}|qSr )r)rprur rArgsr)rrrrvr$r rrJr r,rrrCr3rrrr r|r r=r~rr)rVrvrgrr r~rr?r rurA_init_statement>sH        z'DefaultExecutionContext._init_statementcCsH||}||_||_|j|_||_|jp6|jdd|_||_ |S)z;Initialize execution context for a ColumnDefault construct.rF) rrrrvr rrJr rr)rVrvrgrr r?r r rA _init_defaultxs   z%DefaultExecutionContext._init_defaultcCs|jdkrdSt}|j}|tkr6d||jjfS|tkrPd||jjfS|tkrjd||jjfS|tkrd||jjfS|t krd|j j |j j ||jjfSdSdS)Nzraw sqlz no key %.5fszcached since %.4gs agozgenerated in %.5fszcaching disabled %.5fsz,dialect %s+%s does not support caching %.5fsunknown) r r perf_counterrrZ _gen_timerrrrrvr(rR)r?nowchr r rA_get_cache_statss&  z(DefaultExecutionContext._get_cache_statscCs8|jr|jjSd|jkr,|jj|jdS|jjSdS)Nr)r r1r rvr2Z_with_schema_translaterKr r rAr2s z+DefaultExecutionContext.identifier_preparercCs|jjSrM)rrrKr r rArszDefaultExecutionContext.enginecCs|jjSrM)r  postfetchrKr r rApostfetch_colssz&DefaultExecutionContext.postfetch_colscCs$|jr|jjS|jr|jjSdSdS)Nr )r!r r,r"r-rKr r rA prefetch_colss z%DefaultExecutionContext.prefetch_colscCs |jjdSrM)r r(rKr r rAreturning_colssz&DefaultExecutionContext.returning_colscCs|jddS)N no_parametersF)r rJrKr r rArEsz%DefaultExecutionContext.no_parameterscCs@|jd|j r|jrtjpd}|tjkr8||jS|SdS)N autocommitF)r rJr r~rZPARSE_AUTOCOMMITshould_autocommit_textr )r?rFr r rAshould_autocommits  z)DefaultExecutionContext.should_autocommitc Cs|j}t|tjr*|jjs*|j|d}d|jkrT|jdi}|j j }|||}|sp|jj rl|j }ni}|j |j|||d|jd}|dk r||j|jjdd}|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. rr)rNr)rrCr r|rvrr=r rJr2rr,rryrrz_cached_result_processorr) r?Zstmttype_rconnrrrprocr r rA_execute_scalars6     z'DefaultExecutionContext._execute_scalarcCs|j}|jr|S|SdSrM)rrZ_branch)r?rKr r rArgsz"DefaultExecutionContext.connectioncCs t|SrM)AUTOCOMMIT_REGEXPmatch)r?r~r r rArG sz.DefaultExecutionContext.should_autocommit_textcCsv|jjs dS|jjrd|jddo`|jr8t|jjtj p`|j sPt|jjtj o`|j o`t |j }n|jdd}|S)NFstream_resultsT)rvr)r#r rJr rCr~rZ SelectableZ TextClauser SERVER_SIDE_CURSOR_RErP)r?Zuse_server_sider r rA_use_server_side_cursors8 z/DefaultExecutionContext._use_server_side_cursorcCsF|jjr4|jdds&|jjr4|r4d|_|Sd|_|SdS)NrQFT) rvr)r rJr#rS_is_server_sidecreate_server_side_cursorcreate_default_cursorrKr r rAr/s  z%DefaultExecutionContext.create_cursorcCs |jSrM)rrrKr r rArVAsz-DefaultExecutionContext.create_default_cursorcCs tdSrMrdrKr r rArUDsz1DefaultExecutionContext.create_server_side_cursorcCsdSrMr rKr r rApre_execGsz DefaultExecutionContext.pre_execcCs tddS)Nz,This dialect does not support OUT parametersrW)r?namesr r rAget_out_parameter_valuesJsz0DefaultExecutionContext.get_out_parameter_valuescCsdSrMr rKr r rA post_execOsz!DefaultExecutionContext.post_execcCs||j|S)zReturn 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. )rIrv)r?rJZcolnameZcoltyper r rAget_result_processorRsz,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 lastrowidrKr r rA get_lastrowid\sz%DefaultExecutionContext.get_lastrowidcCsdSrMr )r?rr r rAhandle_dbapi_exceptionosz.DefaultExecutionContext.handle_dbapi_exceptioncCs|jjSrM)rrowcountrKr r rAr`rsz DefaultExecutionContext.rowcountcCs|jjSrM)rvrTrKr r rArTvsz.DefaultExecutionContext.supports_sane_rowcountcCs|jjSrM)rvrrKr r rArysz4DefaultExecutionContext.supports_sane_multi_rowcountcCs|js |jr|}nx|j}|jr<|tjkr||_ dS)NcSsg|]\}}|jr||fqSr )Z isoutparamrr5r(r r rArszADefaultExecutionContext._setup_out_parameters..cSsg|] \}}|qSr r ror r rArscSsg|] \}}|qSr r ror r rArs) r  bind_namesrziprZrDZ dialect_implrvZget_dbapi_typer-result_processorrout_parameters) r?rkZout_bindparamsrs bindparamZ raw_valuerJZ impl_typeZ dbapi_typerrr r rAris*      z-DefaultExecutionContext._setup_out_parameterscCs|jr|jjr||_|j}|jr>|tjkr>t |j |j }|j pJ|j j }|dkrZtj}|jrpt|||}nt|||}|jr|jr|}||_||||_|jjst|n|js|nJ|jr|jr|}|g|_||jjstn|jjs|j||SrM)r!r r_setup_ins_pk_from_lastrowidinserted_primary_key_rowsrbrTrcrdrerr rfrZ_NO_CURSOR_DMLr rgrhr)allreturned_default_rows%_setup_ins_pk_from_implicit_returning _metadataZ returns_rowsAssertionErrorZ _soft_closer'r"rzr`)r?rlrmrkrowsrr r rArasP       z1DefaultExecutionContext._setup_dml_or_text_resultcCs|SrM)_setup_ins_pk_from_emptyrKr r rArvsz1DefaultExecutionContext.inserted_primary_key_rowscCs"|jj}|}|||jdgS)Nr)r +_inserted_primary_key_from_lastrowid_getterr^r)r?getterr]r r rAru sz4DefaultExecutionContext._setup_ins_pk_from_lastrowidcs|jjfdd|jDS)Ncsg|]}d|qSrMr )rr5rr rArszDDefaultExecutionContext._setup_ins_pk_from_empty..)r r~rrKr rrAr}sz0DefaultExecutionContext._setup_ins_pk_from_emptycs.|sgS|jj|j}fddt||DS)Ncsg|]\}}||qSr r )rrr5rr rAr!szQDefaultExecutionContext._setup_ins_pk_from_implicit_returning..)r Z+_inserted_primary_key_from_returning_getterrrq)r?rkr|rr rrArys z=DefaultExecutionContext._setup_ins_pk_from_implicit_returningcCs|js |jot|jjSrM)r!r"r&r rArKr r rAlastrow_has_defaults%sz,DefaultExecutionContext.lastrow_has_defaultsc sjs jrdSjjjjd}|dkr0dSjjr\t|}jj |j j j tjjrtjjjjrfddjjD}nddjjD}g}|D]\}jjkrq|jkrPjjrtjj||fddtj|Dn0|d|fddj|Dq|drn||n|}||jfqzjj |Wn8tk r}zj !|dddW5d}~XYnXdS) a&Given a cursor and ClauseParameters, 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 require it, currently cx_oracle. N)Z include_typesZ exclude_typescsg|]}|jj|fqSr )r ZbindsrrKr rArIsz.cSsg|]\}}||fqSr r )rrtrr r rArNsc3s@|]8\}}r||n||jj|fVqdSrM)rJrDr )rr paramname)rtdbtypesescaped_bind_nameshas_escaped_namesnumr rAr\s  z;DefaultExecutionContext._set_input_sizes..c3s*|]"}r||n|jfVqdSrM)rJrD)rr)rtdbtyperrr rArls )"r r$r Z_get_set_input_sizes_lookupinclude_set_input_sizesexclude_set_input_sizesrvZ _has_eventsr3dispatchZdo_setinputsizesrr~rr&rr,r4rprr1r2rDZ_is_tuple_typerr extendr*rJrZdo_set_input_sizes BaseExceptionrZ_handle_dbapi_exception)r?Z inputsizesrZgeneric_inputsizesrZ escaped_namerr )rtrrrrrr?rA_set_input_sizes*s               z(DefaultExecutionContext._set_input_sizescCsF|jr|||S|jr(||_||S|jr<||||S|jSdSrM) is_sequenceZ fire_sequenceZ is_callablecurrent_columnrEZis_clause_element_exec_default_clause_element)r?columnrrJr r rA _exec_defaults  z%DefaultExecutionContext._exec_defaultcs|jst|j|}n|j}t|j|jd}||j|j rh|j }|j fdd|D}nt fddD}|j t|||dS)Nrucs,g|]$}|kr ||n|qSr r rrr rArszHDefaultExecutionContext._exec_default_clause_element..c3s2|]*}||kr ||n|fVqdSrMr rrr rArs zGDefaultExecutionContext._exec_default_clause_element..)r)Z _arg_is_typedrZ type_coercerErwrxrvrr0r,r4rr3rNr r|)r?rrrJZ default_argr r4rr rrArs*   z4DefaultExecutionContext._exec_default_clause_elementTcsz|j|j}Wntk r.tdYnX|jj}|r|jr|jr|j rl|j d|j j |j i}n|j |j i}d|j }|fdd|D|SSdS)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 functionrrc3s"|]}|d|ffVqdS)z%s_m%dNr rindexrr rArszADefaultExecutionContext.get_current_parameters..N)current_parametersrAttributeErrorr rnr  compile_stater!Z_has_multi_parametersZ_is_multiparam_columnroriginalrZ_dict_parameterskeysr)r?Zisolate_multiinsert_groupsrrr8rr rrAget_current_parameterss2!    z.DefaultExecutionContext.get_current_parameterscCs$|jdkrdS|||j|jSdSrM)rrrDr?rr r rAget_insert_defaults z*DefaultExecutionContext.get_insert_defaultcCs$|jdkrdS|||j|jSdSrM)onupdaterrDrr r rAget_update_defaults z*DefaultExecutionContext.get_update_defaultcCs|jjd}i}|jj}|jj}|D]}|jr$|jjr$|jj||<q$|D]}|jrH|jjrH|jj||<qH|jD]~}||_ |D]4}||kr||}n | |}|dk r|||||<q||D]4}||kr||}n | |}|dk r||||<qqn|` dS)Nr) r _key_getters_for_crud_columnr,r-r is_scalarrErrrrr)r? key_getterZscalar_defaultsr,r-cr5valr r rAr."s2      z5DefaultExecutionContext._process_executemany_defaultscCs|jjd}|jd|_}|jjD]B}|jrH|jjsH|jjrH|jj}n | |}|dk r$||||<q$|jj D]"}| |}|dk rp||||<qp|`dS)Nrr) r rrrr,rrrrErr-r)r?rrrrr r rAr/Gs      z7DefaultExecutionContext._process_executesingle_defaults)N)T)Rrr]rr!r"r#r%r$r rr r~r rxr rr rrrcrdrbZ cache_statsrr)r'r rTrjZ_translate_colnamer2rrrrrr6r:r;r@rr2rrBrCrDrErHrNrrgrGrSrrVrUrXrZr[r\r^r_r`rTrrnrirarvrur}ryrrrrrrrrr.r/r r r rAr?s 3  % 9         * !  (F  c ' >%r)2rr;rrrerNrrrcrbaserrr r r r rjr ZsqlrrZ sql.elementsrrxIUNICODErOrRsymbolrrrrrDialectrobjectrrrrrrrrZExecutionContextrZexecution_ctx_clsr r r rAsb                   a'