U
    ÌZjÏ ã                   @   s¬  d Z ddlZddlZddlZddlZddlZddlmZ ddlmZ	 ddlm
Z
 ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ e dejejB ¡Ze dejejB ¡Ze d¡Ze d¡Z e d¡Z!e d¡Z"e d¡Z#G dd„ de
j$ƒZ%G dd„ de&ƒZ'G dd„ de'ej(ƒZ)G dd „ d e'ej*ƒZ+G d!d"„ d"e'ej,ƒZ-G d#d$„ d$e%ƒZ.G d%d&„ d&e
j/ƒZ0e0e%_1dS )'a  Default 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_MISSÚCACHING_DISABLEDÚNO_CACHE_KEYÚNO_DIALECT_SUPPORTc                   @   sV  e Zd ZdZejZejZej	Z
ejZdZdZdZdZdZdZeZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$e% &de' (¡ i¡Z)e% &de% *d¡fde%j+fd	e% *d
¡fde% *d
¡fde%j+fde%j+fde%j+fde%j,fg¡Z-dZ.e%j/�r
dZ0dZ1e2j3j4Z5dZ6ndZ0dZ1e2j3j7Z5dZ6dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?i Z@dZAdZBdZCdZDdZEdZFdZGdZHdZIdZJdZKdZLdZMdZNe% &¡ ZOdZPeQZQeRZReSZSeTZTeUZUdZVe%jWddddd�dddddddddeXejYƒdfdd„ƒZZdd„ Z[e%j\d d!„ ƒZ]e%j\d"d#„ ƒZ^e_d$d%„ ƒZ`e_d&d'„ ƒZaebd(d)„ ƒZcd*d+„ Zdebd,d-„ ƒZed.d/„ Zfd0d1„ Zgd2d3„ Zhd4d5„ Zidrd6d7„Zjd8d9„ Zkd:d;„ Zldsd<d=„Zmd>d?„ Znd@dA„ ZodBdC„ ZpdDdE„ ZqdFdG„ ZrdHdI„ ZsdJdK„ ZtdLdM„ ZudNdO„ ZvdPdQ„ ZwdRdS„ ZxdTdU„ Zye%j\dVdW„ ƒZzdXdY„ Z{dZd[„ Z|d\d]„ Z}d^d_„ Z~d`da„ Zdtdbdc„Z€duddde„Z�dvdfdg„Z‚dhdi„ Zƒdjdk„ Z„dldm„ Z…dndo„ Z†dpdq„ Z‡dS )wÚDefaultDialectz!Default implementation of DialectTFr   Úisolation_levelÚconvert_unicodeÚforceÚpool_timeoutZechoÚdebugZ	echo_poolZpool_recycleZ	pool_sizeZmax_overflowÚfutureNÚuse_encodingÚdefaulti'  Únamed© )z1.3zñThe :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.4a  The :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!   zÀThe :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!   zÑ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.)r   Zempty_in_strategyÚcase_sensitiveÚserver_side_cursorszutf-8c                 K   sB  t | ddƒst d| j ¡ |r<| js6t d|  ¡‚nd| _|| _|| _	d| _
d | _|| _|d k	rj|| _n| jd k	r€| jj| _n| j| _|d k	r–|| _| jdk| _
|  | ¡| _|  | ¡| _|d k	rÈ|| _|| _|| _| jrâ| j| _|	| _|
| _| jdk�rt |¡| _n| jd k	�r"t | j¡| _t | j	¡| _t | j	¡| _ d S )NZported_sqla_06Tz2The %s dialect is not yet ported to the 0.6 formatz/Dialect %s does not support server side cursorsF)ZqmarkÚformatÚnumericr   )!Úgetattrr   ÚwarnÚnameÚsupports_server_side_cursorsr	   ÚArgumentErrorr#   r   ÚencodingÚ
positionalZ_ischemaÚdbapiÚ
paramstyleÚdefault_paramstyleÚimplicit_returningÚpreparerÚidentifier_preparerÚtype_compilerÚsupports_native_booleanr"   Ú#_user_defined_max_identifier_lengthÚmax_identifier_lengthÚlabel_lengthÚcompiler_lintingÚdescription_encodingr   Zto_unicode_processor_factoryÚ_description_decoderÚcodecsÚ
getencoderÚ_encoderÚ_decoder)Úselfr   r+   r.   r-   r0   r"   r4   r6   r7   r8   r#   Úkwargsr    r    ú\/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/sqlalchemy/engine/default.pyÚ__init__ì   s`    3ÿÿÿ
ÿÿþÿþzDefaultDialect.__init__c                 C   s$   t |tƒs t dtt|ƒf ¡‚d S )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.)Ú
isinstancer   r	   r*   Útype)r?   Úargr    r    rA   Ú_ensure_has_table_connectionS  s    

úÿz+DefaultDialect._ensure_has_table_connectionc                 C   s:   | j j dd ¡}|d kr2tjd| j| jf dd� 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.Zcprf)Úcode)Ú	__class__Ú__dict__Úgetr   r'   r(   ÚdriverÚbool)r?   Zsscr    r    rA   Ú_supports_statement_cache`  s    	
÷
õz(DefaultDialect._supports_statement_cachec                 C   s   t  ¡ S ©N)ÚweakrefÚWeakKeyDictionary©r?   r    r    rA   Ú_type_memost  s    zDefaultDialect._type_memosc                 C   s   | j d | j S )Nú+)r(   rL   rR   r    r    rA   Údialect_descriptionx  s    z"DefaultDialect.dialect_descriptionc                 C   s   | j S )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_rowcountrR   r    r    rA   Ú supports_sane_rowcount_returning|  s    	z/DefaultDialect.supports_sane_rowcount_returningc                 C   s   t | dtjƒS )NZ	poolclass)r&   r
   Z	QueuePool)ÚclsÚurlr    r    rA   Úget_pool_class‡  s    zDefaultDialect.get_pool_classc                 C   s
   |   |¡S rO   )rZ   )r?   rY   r    r    rA   Úget_dialect_pool_class‹  s    z%DefaultDialect.get_dialect_pool_classc                 C   sD   d  | j d¡dd… ¡}zt|d ƒ W n tk
r>   Y nX d S )NÚ.r   éÿÿÿÿz
.provision)ÚjoinÚ
__module__ÚsplitÚ
__import__ÚImportError)rX   Úpackager    r    rA   Úload_provisioningŽ  s
    z DefaultDialect.load_provisioningc                 C   s  z|   |¡| _W n tk
r*   d | _Y nX z|  |¡| _W n tk
rV   d | _Y nX z|  |j¡| _W n tk
r„   d | _Y nX | jt	j
jkr°tjr¤t d¡‚|  |¡| _| jd k	rÐ|  |¡rÐd  | _| _| jsê|  |¡}|rê|| _| j�r| j| jk�rt d| j| jf ¡‚d S )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_infoÚserver_version_infoÚNotImplementedErrorZ_get_default_schema_nameÚdefault_schema_nameÚget_default_isolation_levelÚ
connectionÚdefault_isolation_levelÚreturns_unicode_stringsÚsqltypesÚStringÚRETURNS_UNKNOWNr   Úpy3kr	   ÚInvalidRequestErrorÚ_check_unicode_returnsr9   Ú_check_unicode_descriptionr:   r5   Ú_check_max_identifier_lengthr6   r7   r*   )r?   ri   Zmax_ident_lengthr    r    rA   Ú
initialize–  sX    ÿ
ÿ
ÿ
ÿÿÿþ
ÿ
þ
þÿzDefaultDialect.initializec                 C   s   d S rO   r    rR   r    r    rA   Ú
on_connectÉ  s    zDefaultDialect.on_connectc                 C   s   dS )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?   ri   r    r    rA   rs   Í  s    
z+DefaultDialect._check_max_identifier_lengthc                 C   s
   |   |¡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

        )Zget_isolation_level©r?   Z
dbapi_connr    r    rA   rh   Ù  s    z*DefaultDialect.get_default_isolation_levelc                    sÂ   t jrˆjst j‰ nt j‰ ˆjr*ˆ ¡ ‰ni ‰‡ ‡‡‡fdd„‰t t 	d¡t
 d¡¡t t 	d¡t
 d¡¡g}|r|||7 }‡fdd„|D ƒ}| dd	g¡r¤t
jjS |dhkr¶t
jjS t
jjS d S )
Nc              
      s�   ˆ t  | ¡jˆd�ƒ}z,ˆj ¡ }ˆ ||ˆ¡ | ¡ }| ¡  W n8 tj	k
rz } zt
 d| ¡ W Y ¢dS d }~X Y nX t|d t
jƒS d S )N©Údialectz2Exception attempting to detect unicode returns: %rFr   )r   ÚselectÚcompileri   r   Ú_cursor_executeÚfetchoneÚcloser	   Z
DBAPIErrorr   r'   rC   Ú	text_type)ÚtestÚ	statementr   ÚrowÚde)Úcast_tori   Ú
parametersr?   r    rA   Úcheck_unicodeö  s    
ÿÿz<DefaultDialect._check_unicode_returns.<locals>.check_unicodez'test plain returns'é<   z'test unicode returns'c                    s   h | ]}ˆ |ƒ’qS r    r    )Ú.0r€   )r†   r    rA   Ú	<setcomp>  s     z8DefaultDialect._check_unicode_returns.<locals>.<setcomp>TF)r   Úpy2kÚsupports_unicode_statementsÚbinary_typer   r,   Úexecute_sequence_formatr   ÚcastÚliteral_columnrl   ZVARCHARZUnicodeÚ
issupersetrm   ZRETURNS_CONDITIONALÚRETURNS_UNICODEZRETURNS_BYTES)r?   ri   Zadditional_testsZtestsÚresultsr    )r„   r†   ri   r…   r?   rA   rq   é  s2    
þþøÿ
ýz%DefaultDialect._check_unicode_returnsc                 C   sv   t jr| jst j}nt j}|j ¡ }zB| |t	 
t	 d¡ d¡¡j| d�ƒ¡ t|jd d t jƒW ¢S | ¡  X d S )Nz'x'Z
some_labelrx   r   )r   rŠ   r‹   rŒ   r   ri   r   r~   Úexecuter   rz   r�   Úlabelr{   rC   Údescription)r?   ri   r„   r   r    r    rA   rr   $  s     
ÿþÿÿz)DefaultDialect._check_unicode_descriptionc                 C   s   t  || 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`.

        )rl   Z
adapt_typeÚcolspecs)r?   Ztypeobjr    r    rA   Útype_descriptor9  s    	zDefaultDialect.type_descriptorc                 C   s@   | j |||d�sdS | j|||d�D ]}|d |kr$ dS q$dS )N)ÚschemaFr(   T)Z	has_tableZget_indexes)r?   ri   Z
table_nameZ
index_namer˜   Úidxr    r    rA   Ú	has_indexD  s    zDefaultDialect.has_indexc                 C   s&   t |ƒ| jkr"t d|| jf ¡‚d S )Nz7Identifier '%s' exceeds maximum length of %d characters)Úlenr6   r	   ZIdentifierError)r?   Úidentr    r    rA   Úvalidate_identifierM  s    ÿÿz"DefaultDialect.validate_identifierc                 O   s   | j j||ŽS rO   )r-   Úconnect)r?   ZcargsZcparamsr    r    rA   rž   T  s    zDefaultDialect.connectc                 C   s   |  ¡ }| |j¡ g |gS rO   )Ztranslate_connect_argsÚupdateÚquery)r?   rY   Úoptsr    r    rA   Úcreate_connect_argsX  s    z"DefaultDialect.create_connect_argsc                    sJ   t ˆjƒ ˆ¡}|rFt ‡fdd„|D ƒ¡‰ t |d¡‡ ‡fdd„ƒ}d S )Nc                 3   s   | ]}|ˆ | fV  qd S rO   r    ©rˆ   r(   ©r¡   r    rA   Ú	<genexpr>c  s    z>DefaultDialect.set_engine_execution_options.<locals>.<genexpr>Zengine_connectc                    s   |sˆ  | ˆ ¡ d S rO   )Ú_set_connection_characteristics)ri   Úbranch)r   r?   r    rA   Úset_connection_characteristicsg  s
     ÿzSDefaultDialect.set_engine_execution_options.<locals>.set_connection_characteristics)ÚsetÚconnection_characteristicsÚintersectionr   Úimmutabledictr   Zlistens_for)r?   Úenginer¡   Úsupported_namesr¨   r    )r   r¡   r?   rA   Úset_engine_execution_options^  s    
ÿÿ
z+DefaultDialect.set_engine_execution_optionsc                    s<   t | jƒ ˆ ¡}|r8t ‡ fdd„|D ƒ¡}|  ||¡ d S )Nc                 3   s   | ]}|ˆ | fV  qd S rO   r    r£   r¤   r    rA   r¥   s  s    zBDefaultDialect.set_connection_execution_options.<locals>.<genexpr>)r©   rª   r«   r   r¬   r¦   )r?   ri   r¡   r®   r   r    r¤   rA   Ú set_connection_execution_optionsn  s    
ÿÿz/DefaultDialect.set_connection_execution_optionsc           	         s¸   ‡ fdd„|  ¡ D ƒ}| ¡ rtdd„ |D ƒ}|rt|jrVt dd dd„ |D ƒ¡ ¡‚nt dd d	d„ |D ƒ¡ ¡ |jj	}|D ]\}}}| 
ˆ ||¡ q€|jjj t ˆ j|¡¡ d S )
Nc                    s    g | ]\}}|ˆ j | |f‘qS r    )rª   )rˆ   r(   ÚvaluerR   r    rA   Ú
<listcomp>z  s   ÿzBDefaultDialect._set_connection_characteristics.<locals>.<listcomp>c                 S   s    g | ]\}}}|j r||f‘qS r    )Ztransactional)rˆ   r(   Úobjr±   r    r    rA   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.z, c                 s   s   | ]\}}|V  qd S rO   r    ©rˆ   r(   r³   r    r    rA   r¥   Œ  s     zADefaultDialect._set_connection_characteristics.<locals>.<genexpr>z¥Connection is already established with a Transaction; setting %s may implicitly rollback or commit the existing transaction, or have no effect until next transactionc                 s   s   | ]\}}|V  qd S rO   r    r´   r    r    rA   r¥   –  s     )ÚitemsZin_transactionÚ
_is_futurer	   rp   r^   r   r'   ri   Údbapi_connectionZset_characteristicZ_connection_recordZfinalize_callbackÚappendÚ	functoolsÚpartialÚ_reset_characteristics)	r?   ri   r   Zcharacteristic_valuesZ
trans_objsr·   r(   Úcharacteristicr±   r    rR   rA   r¦   x  s2    
þþüÿúÿ

ÿz.DefaultDialect._set_connection_characteristicsc                 C   s$   |D ]}| j | }| | |¡ qd S rO   )rª   Zreset_characteristic)r?   r   r·   Zcharacteristic_namer¼   r    r    rA   r»      s
    ÿz%DefaultDialect._reset_characteristicsc                 C   s   d S rO   r    ©r?   r·   r    r    rA   Údo_begin§  s    zDefaultDialect.do_beginc                 C   s   |  ¡  d S rO   )Úrollbackr½   r    r    rA   Údo_rollbackª  s    zDefaultDialect.do_rollbackc                 C   s   |  ¡  d S rO   )Úcommitr½   r    r    rA   Ú	do_commit­  s    zDefaultDialect.do_commitc                 C   s   |   |¡ d S rO   )Údo_closer½   r    r    rA   Údo_terminate°  s    zDefaultDialect.do_terminatec                 C   s   |  ¡  d S rO   )r~   r½   r    r    rA   rÃ   ³  s    zDefaultDialect.do_closec                 C   s   t t d¡j| d�ƒS )Nr   rx   )Ústrr   rz   r{   rR   r    r    rA   Ú_dialect_specific_select_one¶  s    z+DefaultDialect._dialect_specific_select_onec              
   C   sv   d }z(|  ¡ }z| | j¡ W 5 | ¡  X W n@ | jjk
rl } z|  |||¡rZW Y ¢
dS ‚ W 5 d }~X Y nX dS d S )NFT)r   r~   r“   rÆ   r-   ÚErrorÚis_disconnect)r?   r·   r   Úerrr    r    rA   Údo_pingº  s    
zDefaultDialect.do_pingc                 C   s   dt  ddd ¡ 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_%032xr   r   é€   )ÚrandomÚrandintrR   r    r    rA   Ú
create_xidÊ  s    zDefaultDialect.create_xidc                 C   s   |  t |¡¡ d S rO   )r“   r   ZSavepointClause©r?   ri   r(   r    r    rA   Údo_savepointÓ  s    zDefaultDialect.do_savepointc                 C   s   |  t |¡¡ d S rO   )r“   r   ZRollbackToSavepointClauserÏ   r    r    rA   Údo_rollback_to_savepointÖ  s    z'DefaultDialect.do_rollback_to_savepointc                 C   s   |  t |¡¡ d S rO   )r“   r   ZReleaseSavepointClauserÏ   r    r    rA   Údo_release_savepointÙ  s    z#DefaultDialect.do_release_savepointc                 C   s   |  ||¡ d S rO   )Úexecutemany©r?   r   r�   r…   Úcontextr    r    rA   Údo_executemanyÜ  s    zDefaultDialect.do_executemanyc                 C   s   |  ||¡ d S rO   ©r“   rÔ   r    r    rA   Ú
do_executeß  s    zDefaultDialect.do_executec                 C   s   |  |¡ d S rO   r×   )r?   r   r�   rÕ   r    r    rA   Údo_execute_no_paramsâ  s    z#DefaultDialect.do_execute_no_paramsc                 C   s   dS )NFr    )r?   Úeri   r   r    r    rA   rÈ   å  s    zDefaultDialect.is_disconnectc                 C   s   |   || j¡ d S rO   )Zset_isolation_levelrj   rw   r    r    rA   Úreset_isolation_levelè  s    z$DefaultDialect.reset_isolation_levelc                 C   sx   |d krd S t jr(t|tƒr(| | j¡}| ¡ }| ¡ }||krD|S ||kr\| j 	|¡s\|S ||krpt
|dd�S |S d S )NT)Úquote)r   rŠ   rC   rÅ   Údecoder+   ÚlowerÚupperr2   Ú_requires_quotesr   ©r?   r(   Z
name_lowerZ
name_upperr    r    rA   Únormalize_nameî  s$    
ÿþzDefaultDialect.normalize_namec                 C   sf   |d krd S |  ¡ }| ¡ }||kr(|S ||kr@| j |¡s@|}tjrb| jsZ| | j¡}nt	|ƒ}|S rO   )
rÞ   rß   r2   rà   r   rŠ   Úsupports_unicode_bindsÚencoder+   Úunicoderá   r    r    rA   Údenormalize_name  s"    ÿþzDefaultDialect.denormalize_namec                 C   s   |S rO   r    rv   r    r    rA   Úget_driver_connection!  s    z$DefaultDialect.get_driver_connection)N)N)N)N)N)ˆÚ__name__r_   Ú__qualname__Ú__doc__r   ZSQLCompilerÚstatement_compilerÚDDLCompilerÚddl_compilerZGenericTypeCompilerr3   ÚIdentifierPreparerr1   Zsupports_alterZsupports_commentsZinline_commentsZuse_setinputsizesrG   Zdefault_sequence_baseÚtupler�   Zsupports_schemasZsupports_viewsÚsupports_sequencesÚsequences_optionalÚ"preexecute_autoincrement_sequencesÚsupports_identity_columnsÚpostfetch_lastrowidr0   Zfull_returningZinsert_executemany_returningZcte_follows_insertZsupports_native_enumr4   Z#non_native_boolean_check_constraintÚsupports_simple_order_by_labelZtuple_in_valuesr   r¬   r   ZIsolationLevelCharacteristicrª   Zbool_or_strZasintZasboolZengine_config_typesZsupports_native_decimalro   r‹   rã   rl   rm   r‘   rk   r9   rn   r(   r6   r5   r   Zmax_index_name_lengthZmax_constraint_name_lengthrV   Úsupports_sane_multi_rowcountr–   r/   Zsupports_default_valuesZsupports_default_metavalueZsupports_empty_insertÚsupports_multivalues_insertZsupports_is_distinct_fromr)   r#   Zsupports_for_update_ofre   rg   Zconstruct_argumentsZrequires_name_normalizeZreflection_optionsZdbapi_exception_translation_mapZis_asyncr   r   r   r   r   Zhas_terminateZdeprecated_paramsÚintZ
NO_LINTINGrB   rF   Úmemoized_propertyrN   rS   ÚpropertyrU   rW   ÚclassmethodrZ   r[   rd   rt   ru   rs   rh   rq   rr   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Û   râ   ræ   rç   r    r    r    rA   r   3   s,  
ÿøÿ*		è#òF






3
;
	
(
	


r   c                   @   s   e Zd Zdd„ ZdS )Ú_RendersLiteralc                 C   s   dd„ }|S )Nc                 S   s   d|  S )Nz'%s'r    )r±   r    r    rA   Úprocess'  s    z2_RendersLiteral.literal_processor.<locals>.processr    )r?   ry   rý   r    r    rA   Úliteral_processor&  s    z!_RendersLiteral.literal_processorN)rè   r_   ré   rþ   r    r    r    rA   rü   %  s   rü   c                   @   s   e Zd ZdS )Ú_StrDateTimeN©rè   r_   ré   r    r    r    rA   rÿ   -  s   rÿ   c                   @   s   e Zd ZdS )Ú_StrDateNr   r    r    r    rA   r  1  s   r  c                   @   s   e Zd ZdS )Ú_StrTimeNr   r    r    r    rA   r  5  s   r  c                   @   s^   e Zd ZejZejZejZ	ej
ZdZdZdZdZdZdZdZdZdZejeejeejeiZdS )ÚStrCompileDialectTFN)rè   r_   ré   r   ZStrSQLCompilerrë   rì   rí   ZStrSQLTypeCompilerr3   rî   r1   rG   ró   rð   rñ   rò   r0   r4   r÷   rõ   rl   ÚDateTimerÿ   ÚDater  ÚTimer  r–   r    r    r    rA   r  9  s(      ýr  c                   @   s.  e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZe ¡ ZdZdZejZdZdZdZdZdZdZdZdZe ¡ ZeZ e!dd„ ƒZ"e!e#fdd„ƒZ$e!dd„ ƒZ%e!d	d
„ ƒZ&dd„ Z'ej(dd„ ƒZ)ej(dd„ ƒZ*ej(dd„ ƒZ+ej(dd„ ƒZ,ej(dd„ ƒZ-ej(dd„ ƒZ.ej(dd„ ƒZ/d\dd„Z0e1dd„ ƒZ2dd „ Z3d!d"„ Z4d#d$„ Z5d%d&„ Z6d'd(„ Z7d)d*„ Z8d+d,„ Z9d-d.„ Z:d/d0„ Z;d1d2„ Z<d3d4„ Z=e1d5d6„ ƒZ>d7d8„ Z?d9d:„ Z@d;d<„ ZAd=d>„ ZBd?d@„ ZCej(dAdB„ ƒZDdCdD„ ZEdEdF„ ZFdGdH„ ZGdIdJ„ ZHdKdL„ ZIdMdN„ ZJdOdP„ ZKdZLd]dRdS„ZMdTdU„ ZNdVdW„ ZOdXdY„ ZPdZd[„ ZQdS )^ÚDefaultExecutionContextFNc           
      C   sÒ   |   | ¡}||_||_|j|_| |_}d|_||_|jpF|j dd¡|_	t
 |¡|_|jr€|j di ¡}|jj}	|	|j|ƒ|_|jsš| |j¡d |_n|j|_| ¡ |_g |_|jrÆ| ¡ g|_ni g|_|S )z8Initialize execution context for a DDLElement construct.TÚfuture_resultFÚschema_translate_mapr   )Ú__new__Úroot_connectionÚ_dbapi_connectionry   ÚcompiledÚisddlÚexecution_optionsr¶   rK   Ú_is_future_resultr   r   Úunicode_statementr	  r1   Ú_render_schema_translatesr‹   r=   r�   Úcreate_cursorr   Úcompiled_parametersr,   r�   r…   )
rX   ry   ri   r·   r  Zcompiled_ddlr?   r  r	  Úrstr    r    rA   Ú	_init_ddl{  s<    

þ ÿ ÿ
z!DefaultExecutionContext._init_ddlc
                    s  |   | ¡}
||
_||
_|j|
_ˆ|
_||
_ˆ |
_|	|
_||
_|j	pN|
j 
dd¡|
_ˆ jˆ jˆ jˆ jˆ jf|
_ˆ j|
_ˆ j|
_ˆ j|
_ˆ j|
_|
jsž|
jsž|
jrÈd|
_tˆ jjƒ|
_tˆ joÂˆ jj ƒ|
_|sàˆ jˆdd�g|
_n(‡ ‡fdd„t |ƒD ƒ|
_t!|ƒdk|
_"t#j$�r t# %ˆ j&¡|
_'nˆ j&|
_'|
 (¡ |
_)|
jj*�sF|
jj+�r`|
j"�rX|
 ,¡  n|
 -¡  ˆ j.‰ˆ j/�svˆ j0�rÄ|
j"�rˆt1 2d¡‚ˆ  3|
jd	 ¡}|j|
_'|j4|
_5t6ˆƒ‰ˆ 7|j8¡ |j9}nˆ j:�rÔ|
jj9}ˆ j;�r |
j 
d
i ¡}ˆ j<j=}||
j'|ƒ|
_'|j>�s|
j' ?|
jj@¡|
_n|
j'|
_g }ˆ j:�rd|
jD ]*‰‡‡fdd„|D ƒ}| A| B|¡¡ �q6n¢|j> }|�rx|jC‰|
jD ]†‰ˆ jD‰|�rÆˆ�r®‡‡‡‡fdd„ˆD ƒ}n‡‡‡fdd„ˆD ƒ}n2ˆ�rä‡‡‡fdd„ˆD ƒ}n‡‡fdd„ˆD ƒ}| A|¡ �q~| B|¡|
_E|
S )z6Initialize execution context for a Compiled construct.r  FT)Úextracted_parametersÚescape_namesc                    s"   g | ]\}}ˆ j |d |ˆd�‘qS )F)r  Z_group_numberr  )Úconstruct_params)rˆ   ÚgrpÚm)r  r  r    rA   r²   é  s   úüz:DefaultExecutionContext._init_compiled.<locals>.<listcomp>r   zL'literal_execute' or 'expanding' parameters can't be used with executemany()r   r	  c                    s,   g | ]$}|ˆkr ˆ| ˆ | ƒnˆ | ‘qS r    r    ©rˆ   Úkey©Úcompiled_paramsr   r    rA   r²   5  s   þÿc                    s>   i | ]6}ˆˆ  ||¡ƒd  |ˆkr2ˆ| ˆ | ƒnˆ | “qS ©r   ©rK   r  )r  ÚencoderÚescaped_bind_namesr   r    rA   Ú
<dictcomp>E  s   ûÿÿz:DefaultExecutionContext._init_compiled.<locals>.<dictcomp>c                    s6   i | ].}ˆ|ƒd  |ˆkr*ˆ| ˆ | ƒnˆ | “qS r   r    r  )r  r"  r   r    rA   r$  N  s   û
ýÿc                    s6   i | ].}ˆ  ||¡|ˆkr*ˆ| ˆ | ƒnˆ | “qS r    r!  r  )r  r#  r   r    rA   r$  X  s   û
ýÿc                    s.   i | ]&}||ˆkr"ˆ| ˆ | ƒnˆ | “qS r    r    r  r  r    rA   r$  a  s
   ýÿ)Fr
  r  r  ry   r  Úinvoked_statementr  Ú	cache_hitr  r¶   rK   r  Z_result_columnsZ_ordered_columnsZ_textual_ordered_columnsZ_ad_hoc_textualZ_loose_column_name_matchingÚresult_column_structÚisinsertÚisupdateÚisdeleteZisplaintextÚis_textÚis_crudrM   r�   Z
_returningÚ_is_explicit_returningÚ	returningÚ_is_implicit_returningr  r  Ú	enumerater›   rÓ   r   rŠ   r   Ústringr  r  r   Úinsert_prefetchÚupdate_prefetchÚ_process_executemany_defaultsÚ_process_executesingle_defaultsÚ_bind_processorsÚliteral_execute_paramsZpost_compile_paramsr	   rp   Z#_process_parameters_for_postcompileZparameter_expansionÚ_expanded_parametersÚdictrŸ   r   Úpositiontupr,   r	  r1   r  r‹   rä   r+   r¸   r�   r=   r#  r…   )rX   ry   ri   r·   r  r  r…   r%  r  r&  r?   Zexpanded_stater:  r	  r  Úparamrä   r    )r  r  r"  r#  r  r   rA   Ú_init_compiled¯  sÖ    
þûÿþÿù


ÿÿ ÿ ÿÿ
ü
ú	ú	ú	üz&DefaultExecutionContext._init_compiledc                    s  |   | ¡}||_||_|j|_d|_||_|jp<|j dd¡|_|sd|jj	rZˆ  
¡ g|_qÈi g|_ndt|d ˆ j
ƒr|||_nLt|d tƒr´ˆ jr˜||_qÈ‡ fdd„|D ƒp®i g|_n‡ fdd„|D ƒ|_t|ƒdk|_ˆ j�st|tjƒ�r||_ˆ  |¡d |_n| |_|_| ¡ |_|S )	z8Initialize execution context for a string SQL statement.Tr  Fr   c                    s    g | ]‰ ‡ ‡fd d„ˆ D ƒ‘qS )c                    s    i | ]}ˆ  |¡d  ˆ | “qS r   )r=   )rˆ   Úk)Údry   r    rA   r$  “  s      zFDefaultExecutionContext._init_statement.<locals>.<listcomp>.<dictcomp>r    )rˆ   rx   )r>  rA   r²   ’  s   ÿz;DefaultExecutionContext._init_statement.<locals>.<listcomp>c                    s   g | ]}ˆ   |¡‘qS r    )r�   )rˆ   Úprx   r    rA   r²   —  s    r   )r
  r  r  ry   r+  r  r¶   rK   r  r,   r�   r…   rC   r9  r‹   r›   rÓ   r   r   r  r=   r�   r  r   )rX   ry   ri   r·   r  r�   r…   r?   r    rx   rA   Ú_init_statementn  sH    
þ

þý
ÿ
 ÿ
z'DefaultExecutionContext._init_statementc                 C   sH   |   | ¡}||_||_|j|_||_|jp6|j dd¡|_| ¡ |_	|S )z;Initialize execution context for a ColumnDefault construct.r  F)
r
  r  r  ry   r  r¶   rK   r  r  r   )rX   ry   ri   r·   r  r?   r    r    rA   Ú_init_default¨  s    
þ
z%DefaultExecutionContext._init_defaultc                 C   s²   | j d krdS t ¡ }| j}|tkr6d|| j j f S |tkrPd|| j j f S |tkrjd|| j j f S |tkr„d|| j j f S |t	krªd| j
j| j
j|| j j f S dS d S )Nzraw sqlzno key %.5fszcached since %.4gs agozgenerated in %.5fszcaching disabled %.5fsz,dialect %s+%s does not support caching %.5fsÚunknown)r  r   Úperf_counterr&  r   Z	_gen_timer   r   r   r   ry   r(   rL   )r?   ÚnowÚchr    r    rA   Ú_get_cache_stats½  s&    

ýz(DefaultExecutionContext._get_cache_statsc                 C   s8   | j r| j jS d| jkr,| jj | jd ¡S | jjS d S )Nr	  )r  r1   r  ry   r2   Z_with_schema_translaterR   r    r    rA   r2   Ö  s    
ÿz+DefaultExecutionContext.identifier_preparerc                 C   s   | j jS rO   )r  r­   rR   r    r    rA   r­   á  s    zDefaultExecutionContext.enginec                 C   s   | j jS rO   )r  Ú	postfetchrR   r    r    rA   Úpostfetch_colså  s    z&DefaultExecutionContext.postfetch_colsc                 C   s$   | j r| jjS | jr| jjS dS d S )Nr    )r(  r  r2  r)  r3  rR   r    r    rA   Úprefetch_colsé  s
    z%DefaultExecutionContext.prefetch_colsc                 C   s   | j j d S rO   )r  r.  rR   r    r    rA   Úreturning_colsò  s    z&DefaultExecutionContext.returning_colsc                 C   s   | j  dd¡S )NÚno_parametersF)r  rK   rR   r    r    rA   rK  ö  s    z%DefaultExecutionContext.no_parametersc                 C   s@   | j  d| j r| jrtjpd¡}|tjkr8|  | j¡S |S d S )NÚ
autocommitF)r  rK   r  r�   r   ZPARSE_AUTOCOMMITÚshould_autocommit_textr  )r?   rL  r    r    rA   Úshould_autocommitú  s    ÿþû
z)DefaultExecutionContext.should_autocommitc           	      C   sÄ   | j }t|tjƒr*| jjs*| j |¡d }d| jkrT| j di ¡}| j	j
}|||ƒ}|sp| jjrl| j ¡ }ni }|j| j||| d� | j ¡ d }|dk	rÀ| | j| jjd d ¡}|rÀ||ƒS |S )a  Execute 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	  )rÕ   Nr   )r  rC   r   r   ry   r‹   r=   r  rK   r2   r  r,   r�   r|   r   r}   Ú_cached_result_processorr•   )	r?   ÚstmtÚtype_r…   Úconnr	  r  ÚrÚprocr    r    rA   Ú_execute_scalar	  s6    

ÿþ
 ÿ
 ÿz'DefaultExecutionContext._execute_scalarc                 C   s   | j }|jr|S | ¡ S d S rO   )r  r¶   Z_branch)r?   rR  r    r    rA   ri   3  s    z"DefaultExecutionContext.connectionc                 C   s
   t  |¡S rO   )ÚAUTOCOMMIT_REGEXPÚmatch)r?   r�   r    r    rA   rM  ;  s    z.DefaultExecutionContext.should_autocommit_textc                 C   sv   | j jsdS | j jrd| j dd¡o`| jr8t| jjtj	ƒp`| j sPt| jjtj
ƒo`| jo`t | j¡}n| j dd¡}|S )NFÚstream_resultsT)ry   r)   r#   r  rK   r  rC   r�   r   Z
SelectableZ
TextClauser  ÚSERVER_SIDE_CURSOR_RErW  )r?   Zuse_server_sider    r    rA   Ú_use_server_side_cursor>  s8     ÿ ÿÿ ÿþú
ð ÿz/DefaultExecutionContext._use_server_side_cursorc                 C   sF   | j jr4| j dd¡s&| j jr4|  ¡ r4d| _|  ¡ S d| _|  ¡ S d S )NrX  FT)	ry   r)   r  rK   r#   rZ  Ú_is_server_sideÚcreate_server_side_cursorÚcreate_default_cursorrR   r    r    rA   r  _  s    þüúùz%DefaultExecutionContext.create_cursorc                 C   s
   | j  ¡ S rO   )r  r   rR   r    r    rA   r]  q  s    z-DefaultExecutionContext.create_default_cursorc                 C   s
   t ƒ ‚d S rO   ©rf   rR   r    r    rA   r\  t  s    z1DefaultExecutionContext.create_server_side_cursorc                 C   s   d S rO   r    rR   r    r    rA   Úpre_execw  s    z DefaultExecutionContext.pre_execc                 C   s   t dƒ‚d S )Nz,This dialect does not support OUT parametersr^  )r?   Únamesr    r    rA   Úget_out_parameter_valuesz  s    ÿz0DefaultExecutionContext.get_out_parameter_valuesc                 C   s   d S rO   r    rR   r    r    rA   Ú	post_exec  s    z!DefaultExecutionContext.post_execc                 C   s   |  | 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.

        )rO  ry   )r?   rQ  ZcolnameZcoltyper    r    rA   Úget_result_processor‚  s    z,DefaultExecutionContext.get_result_processorc                 C   s   | j jS )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   Ú	lastrowidrR   r    r    rA   Úget_lastrowidŒ  s    z%DefaultExecutionContext.get_lastrowidc                 C   s   d S rO   r    )r?   rÚ   r    r    rA   Úhandle_dbapi_exceptionŸ  s    z.DefaultExecutionContext.handle_dbapi_exceptionc                 C   s   | j jS rO   )r   ÚrowcountrR   r    r    rA   rg  ¢  s    z DefaultExecutionContext.rowcountc                 C   s   | j jS rO   )ry   rV   rR   r    r    rA   rV   ¦  s    z.DefaultExecutionContext.supports_sane_rowcountc                 C   s   | j jS rO   )ry   rö   rR   r    r    rA   rö   ©  s    z4DefaultExecutionContext.supports_sane_multi_rowcountc                 C   sð   | j }| js| jr$|  ¡ }d }}n”| dd ¡}| jp@| dd¡}| j}|rf|tjkrft 	| j
| j ¡}|jpr| j
j}|d kr‚tj}| jrª| jjršt d¡‚t | ||¡}nt | ||¡}| jrÖ| jsÖ| jjrÖ|  |¡ |j| _|rì| |¡}|S )NFÚ	yield_perrX  z3can't use future_result=True with close_with_result)r  r,  r+  Ú_setup_dml_or_text_resultrK   r[  Úcursor_fetch_strategyÚ_cursorÚ_DEFAULT_FETCHÚBufferedRowCursorFetchStrategyr   Úalternate_cursor_descriptionr•   Z_NO_CURSOR_DQLr  r  Zshould_close_with_resultr	   rp   ÚCursorResultÚLegacyCursorResultr  r  Zhas_out_parametersÚ_setup_out_parametersÚ_soft_closedrh  )r?   Zexec_optÚresultZypÚsrÚstrategyÚcursor_descriptionr    r    rA   Ú_setup_result_proxy¬  sV    
 ÿþÿ  ÿ  ÿÿþý

z+DefaultExecutionContext._setup_result_proxyc           
      C   sš   dd„ | j j ¡ D ƒ}i }tdd„ |D ƒ|  dd„ |D ƒ¡ƒD ]P\}}|j}| | j¡}| | jj	¡}| 
| j|¡}	|	d k	r„|	|ƒ}|||j< q>||_d S )Nc                 S   s   g | ]\}}|j r||f‘qS r    )Z
isoutparam©rˆ   r;  r(   r    r    rA   r²   Þ  s   þzADefaultExecutionContext._setup_out_parameters.<locals>.<listcomp>c                 S   s   g | ]\}}|‘qS r    r    rx  r    r    rA   r²   æ  s     c                 S   s   g | ]\}}|‘qS r    r    rx  r    r    rA   r²   è  s     )r  Ú
bind_namesrµ   Úzipra  rD   Zdialect_implry   Zget_dbapi_typer-   Úresult_processorr  Úout_parameters)
r?   rs  Zout_bindparamsr|  Ú	bindparamÚ	raw_valuerQ  Z	impl_typeZ
dbapi_typer{  r    r    rA   rq  Ü  s*    
þÿþ ÿz-DefaultExecutionContext._setup_out_parametersc                 C   s  | j r| jjr|  ¡ | _| j}| jr>|tjkr>t 	| j
| j¡}|jpJ| j
j}|d krZtj}| jrpt | ||¡}nt | ||¡}| j rÌ| jr¼| ¡ }|| _|  ||¡| _|jjs²t‚| ¡  n| jsÊ| ¡  nJ| jrþ| jrþ| ¡ }|g| _| ¡  |jjsüt‚n|jj�s|j | ¡  |S rO   )r(  r  rô   Ú_setup_ins_pk_from_lastrowidÚinserted_primary_key_rowsrj  r[  rk  rl  rm  r   r  rn  r•   Z_NO_CURSOR_DMLr  ro  rp  r/  ÚallÚreturned_default_rowsÚ%_setup_ins_pk_from_implicit_returningÚ	_metadataZreturns_rowsÚAssertionErrorZ_soft_closer-  r)  r}   rg  )r?   ru  rv  rs  Úrowsr‚   r    r    rA   ri  ø  sP    ÿ ÿÿ  ÿ
ÿ


z1DefaultExecutionContext._setup_dml_or_text_resultc                 C   s   |   ¡ S rO   )Ú_setup_ins_pk_from_emptyrR   r    r    rA   r€  >  s    z1DefaultExecutionContext.inserted_primary_key_rowsc                 C   s"   | j j}|  ¡ }||| jd ƒgS ©Nr   )r  Ú+_inserted_primary_key_from_lastrowid_getterre  r  )r?   Úgetterrd  r    r    rA   r  E  s    z4DefaultExecutionContext._setup_ins_pk_from_lastrowidc                    s   | j j‰ ‡ fdd„| jD ƒS )Nc                    s   g | ]}ˆ d |ƒ‘qS rO   r    )rˆ   r;  ©rŠ  r    rA   r²   M  s     zDDefaultExecutionContext._setup_ins_pk_from_empty.<locals>.<listcomp>)r  r‰  r  rR   r    r‹  rA   r‡  K  s    z0DefaultExecutionContext._setup_ins_pk_from_emptyc                    s.   |sg S | j j‰ | j}‡ fdd„t||ƒD ƒS )Nc                    s   g | ]\}}ˆ ||ƒ‘qS r    r    )rˆ   r‚   r;  r‹  r    rA   r²   W  s    zQDefaultExecutionContext._setup_ins_pk_from_implicit_returning.<locals>.<listcomp>)r  Z+_inserted_primary_key_from_returning_getterr  rz  )r?   rs  r†  r  r    r‹  rA   rƒ  O  s    
ÿz=DefaultExecutionContext._setup_ins_pk_from_implicit_returningc                 C   s   | j s| jot| jjƒS rO   )r(  r)  rM   r  rG  rR   r    r    rA   Úlastrow_has_defaults[  s    ÿz,DefaultExecutionContext.lastrow_has_defaultsc              
      sÚ  ˆj sˆjrdS ˆjjˆjˆjd�}|dkr0dS ˆjjr\t|ƒ}ˆjj	 
|ˆjˆjˆjˆ¡ tˆjjƒ‰ˆrtˆjj‰ˆjjr”‡fdd„ˆjjD ƒ}ndd„ ˆjj ¡ D ƒ}g }|D ]Ò\}‰ ˆ ˆjjkrÈq²|ˆjk�rPˆ jj�rtˆ jjƒ‰|ˆ  ‰| ‡ ‡‡‡‡fdd„tˆj| ƒD ƒ¡ n0| ˆ d¡‰| ‡ ‡‡‡fdd„ˆj| D ƒ¡ q²| ˆ d¡‰ˆ�rnˆ ||¡n|}| |ˆˆ jf¡ q²zˆj ˆj|ˆ¡ W n8 tk
�rÔ } zˆj  !|dddˆ¡ W 5 d}~X Y nX dS )	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, asyncpg and pg8000.

        N)Zinclude_typesZexclude_typesc                    s   g | ]}|ˆ j j| f‘qS r    )r  Zbindsr  rR   r    rA   r²     s   ÿz<DefaultExecutionContext._set_input_sizes.<locals>.<listcomp>c                 S   s   g | ]\}}||f‘qS r    r    )rˆ   r}  r  r    r    rA   r²   „  s   ÿc                 3   s@   | ]8\}}ˆrˆ  ||¡n|ˆ|ˆ  ˆ jj|ˆ  fV  qd S rO   )rK   rD   r   )rˆ   r™   Ú	paramname)r}  Údbtypesr#  Úhas_escaped_namesÚnumr    rA   r¥   ’  s   
úÿ
ùz;DefaultExecutionContext._set_input_sizes.<locals>.<genexpr>c                 3   s*   | ]"}ˆrˆ  ||¡n|ˆˆ jfV  qd S rO   )rK   rD   )rˆ   r�  )r}  Údbtyper#  r�  r    rA   r¥   ¢  s   
úÿù)"r  r+  r  Z_get_set_input_sizes_lookupÚinclude_set_input_sizesÚexclude_set_input_sizesry   Z_has_eventsr9  ÚdispatchZdo_setinputsizesr   r�   r…   rM   r#  r,   r:  ry  rµ   r7  r8  rD   Z_is_tuple_typer›   r   Úextendr0  rK   r¸   Zdo_set_input_sizesÚBaseExceptionr  Z_handle_dbapi_exception)r?   Z
inputsizesrµ   Zgeneric_inputsizesr  Zescaped_namerÚ   r    )r}  r‘  rŽ  r#  r�  r�  r?   rA   Ú_set_input_sizes`  s„    	þ    ÿ
þ
þ

ÿö

ö
ÿý
ÿ  ÿ    ÿz(DefaultExecutionContext._set_input_sizesc                 C   sF   |j r|  ||¡S |jr(|| _| | ¡S |jr<|  |||¡S |jS d S rO   )Úis_sequenceZfire_sequenceÚis_callableÚcurrent_columnrE   Zis_clause_elementÚ_exec_default_clause_element)r?   Úcolumnr   rQ  r    r    rA   Ú_exec_defaultÃ  s    
z%DefaultExecutionContext._exec_defaultc                    s–   |j st |j|¡}n|j}t |¡j| jd�}| ¡ ‰ |j‰|j	rh|j
}| j ‡ ‡fdd„|D ƒ¡}nt‡ ‡fdd„ˆ D ƒƒ}| jt |¡||d�S )Nrx   c                    s,   g | ]$}|ˆkr ˆ| ˆ | ƒnˆ | ‘qS r    r    r  r  r    rA   r²   à  s   þÿzHDefaultExecutionContext._exec_default_clause_element.<locals>.<listcomp>c                 3   s2   | ]*}||ˆkr ˆ| ˆ | ƒnˆ | fV  qd S rO   r    r  r  r    rA   r¥   è  s   ûÿüzGDefaultExecutionContext._exec_default_clause_element.<locals>.<genexpr>)r…   )Z_arg_is_typedr   Ztype_coercerE   rz   r{   ry   r  r6  r,   r:  r�   r9  rU  r   r   )r?   rœ  r   rQ  Zdefault_argr  r:  r…   r    r  rA   r›  Î  s*    üÿ	ù	  ÿz4DefaultExecutionContext._exec_default_clause_elementTc                    s°   z| j ‰| j}W n tk
r.   t d¡‚Y nX | jj}|r¨| jr¨|jr¨|j	rl|j
d ‰ |jjˆ|j i}n|jˆ|j i}d‰ |j ¡ }| ‡ ‡fdd„|D ƒ¡ |S ˆS dS )ai  Return 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 functionr   r   c                 3   s"   | ]}|ˆd |ˆ f  fV  qdS )z%s_m%dNr    r  ©Úindexr…   r    rA   r¥   E  s    zADefaultExecutionContext.get_current_parameters.<locals>.<genexpr>N)Úcurrent_parametersrš  ÚAttributeErrorr	   rp   r  Úcompile_stater(  Z_has_multi_parametersZ_is_multiparam_columnrŸ  Úoriginalr  Z_dict_parametersÚkeysrŸ   )r?   Zisolate_multiinsert_groupsrœ  r¢  r>  r¤  r    rž  rA   Úget_current_parameters  s2    !
ÿ
ÿþý

ÿz.DefaultExecutionContext.get_current_parametersc                 C   s$   |j d krd S |  ||j |j¡S d S rO   )r   r�  rD   ©r?   rœ  r    r    rA   Úget_insert_defaultL  s    
z*DefaultExecutionContext.get_insert_defaultc                 C   s$   |j d krd S |  ||j |j¡S d S rO   )Úonupdater�  rD   r¦  r    r    rA   Úget_update_defaultR  s    
z*DefaultExecutionContext.get_update_defaultc                 C   sú   | j j}i }| j j}| j j}|D ]&}|jr |jjs |jjr |jj||< q |D ]}|jrL|jjrL|jj||< qL| j	D ]~}|| _
|D ]4}||kr–|| }n
|  |¡}|d k	r€||||ƒ< q€|D ]4}||krÐ|| }n
|  |¡}|d k	rº||||ƒ< qºqr| `
d S rO   )r  Ú_within_exec_param_key_getterr2  r3  r   r˜  Ú	is_scalarrE   r¨  r  r   r§  r©  )r?   Ú
key_getterZscalar_defaultsr2  r3  Úcr;  Úvalr    r    rA   r4  X  s2    




z5DefaultExecutionContext._process_executemany_defaultsc                 C   s˜   | j j}| jd  | _}| j jD ]B}|jrD|jjsD|jjrD|jj}n
|  	|¡}|d k	r ||||ƒ< q | j j
D ]"}|  |¡}|d k	rl||||ƒ< ql| `d S rˆ  )r  rª  r  r   r2  r   r˜  r«  rE   r§  r3  r©  )r?   r¬  r  r­  r®  r    r    rA   r5  ~  s    þ


z7DefaultExecutionContext._process_executesingle_defaults)N)T)Rrè   r_   ré   r(  r)  r*  r,  r+  r  rÓ   r  r�   r'  r‚  r   r¬   r  r’  r“  rk  rl  rj  Zcache_statsr%  r/  r-  r  r[  rr  Z_translate_colnamer8  r   r&  rû   r  r   r<  r@  rA  rF  rù   r2   r­   rH  rI  rJ  rK  rN  rU  rú   ri   rM  rZ  r  r]  r\  r_  ra  rb  rc  re  rf  rg  rV   rö   rw  rq  ri  r€  r  r‡  rƒ  rŒ  r—  r�  r›  r   r¥  r§  r©  r4  r5  r    r    r    rA   r  U  s¬   
3ö ?
9









*
!

0F
c'
>&r  )2rê   r;   r¹   rÌ   ÚrerP   Ú r   r   rk  r   Úbaser   r   r	   r
   r   r   rl   r   Úsqlr   r   Zsql.elementsr   r{   ÚIÚUNICODErV  rY  Úsymbolr   r   r   r   r   ÚDialectr   Úobjectrü   r  rÿ   r  r  r  r  r  ZExecutionContextr  Zexecution_ctx_clsr    r    r    rA   Ú<module>   sb    
ÿ




     w        H