
    ؄_.                     H   d 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j        dej        ej        z            Z ej        dej        ej        z            Z G d dej                  Z G d de          Z G d deej                  Z  G d deej!                  Z" G d deej#                  Z$ G d de          Z% G d  d!ej&                  Z'e'e_(        d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   )
interfaces)
reflection)result   )event)exc)pool)
processors)types)util)compiler)
expression)schema)quoted_namez-\s*(?:UPDATE|INSERT|CREATE|DELETE|DROP|ALTER)z	\s*SELECTc                      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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 e j!        d e j"        d          fde j#        fd e j"        d	          fd
 e j"        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Z(dZ)dZ*dZ+ndZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1i Z2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;	 dZ<dZ= e j!                    Z>	  e j?        d          	 	 	 	 	 	 	 	 	 	 	 d>d            Z@e jA        d             ZBeCd             ZDeCd             ZEeFd             ZGeFd             ZHd ZId  ZJd! ZKd?d"ZLd# ZMd$ ZNd% ZOd?d&ZPd' ZQd( ZRd) ZSd* ZTd+ ZUd, ZVd- ZWd. ZXd/ ZYd0 ZZe jA        d1             Z[d2 Z\d3 Z]d4 Z^d5 Z_d6 Z`d?d7Zad?d8Zbd?d9Zcd: Zdd; Zed< Zfd= ZgdS )@DefaultDialectz!Default implementation of DialectTFr   convert_unicodeforcepool_timeoutechodebug	echo_poolpool_recycle	pool_sizemax_overflowpool_threadlocalNuse_encodingdefaulti'  named )z1.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.)r   utf-8staticc                    t          | dd          st          j        d| j        z             || _        || _        d| _        d | _        || _        ||| _	        n%| j        | j        j	        | _	        n| j
        | _	        ||| _        | j	        dv | _        |                     |           | _        |                     |           | _        ||| _        ||| _        || _        |	| _        |	dk    rd| _        n+|	dv rd| _        |	dk    | _        nt+          j        d	          |
| _        | j        r| j        | _        || _        | j        d
k    rt7          j        |          | _        n%| j        t7          j        | j                  | _        t=          j        | j                  | _         t7          j        | j                  | _!        d S )Nported_sqla_06Tz2The %s dialect is not yet ported to the 0.6 formatF)qmarkformatnumericr#   )dynamicdynamic_warnr*   z?empty_in_strategy may be 'static', 'dynamic', or 'dynamic_warn'r   )"getattrr   warnnamer   encoding
positional_ischemadbapi
paramstyledefault_paramstyleimplicit_returningprepareridentifier_preparertype_compilersupports_right_nested_joinssupports_native_booleancase_sensitiveempty_in_strategy_use_static_in_warn_on_empty_inr	   ArgumentError#_user_defined_max_identifier_lengthmax_identifier_lengthlabel_lengthdescription_encodingr   to_unicode_processor_factory_description_decodercodecs
getencoder_encoder_decoder)selfr   r.   r2   r1   r4   r8   r:   r9   r;   r@   rA   kwargss                ^/var/www/book.euthymeo.com/html/venv/lib/python3.11/site-packages/sqlalchemy/engine/default.py__init__zDefaultDialect.__init__   s   2 t-t44 	ID)  
  / 
!(DOOZ#"j3DOO"5DO)&8D#/-KK#'==#6#6 !//55&2/JD,".+BD(,!2(("&D"==="'D%6.%HD""#/  
 4I03 	8 & )$667) )D%% &27')) ))D% )$-88"?NN    c                 (    t          j                    S N)weakrefWeakKeyDictionaryrI   s    rK   _type_memoszDefaultDialect._type_memos  s    (***rM   c                 &    | j         dz   | j        z   S )N+)r-   driverrR   s    rK   dialect_descriptionz"DefaultDialect.dialect_description  s    y3,,rM   c                     | j         S )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_rowcountrR   s    rK    supports_sane_rowcount_returningz/DefaultDialect.supports_sane_rowcount_returning  s     **rM   c                 8    t          | dt          j                  S )N	poolclass)r+   r
   	QueuePool)clsurls     rK   get_pool_classzDefaultDialect.get_pool_class*  s    sK888rM   c                     d                     | j                            d          dd                   }	 t          |dz              d S # t          $ r Y d S w xY w)N.r   z
.provision)join
__module__split
__import__ImportError)r^   packages     rK   load_provisioningz DefaultDialect.load_provisioning.  sl    ((3>//44QrT:;;	w-..... 	 	 	DD	s   A 
AAc                    	 |                      |          | _        n# t          $ r
 d | _        Y nw xY w	 |                     |          | _        n# t          $ r
 d | _        Y nw xY w	 |                     |j                  | _        n# t          $ r
 d | _        Y nw xY w|                     |          | _	        | j
        #|                     |          rd x| _        | _
        | j        s|                     |          }|r|| _        | j        r3| j        | j        k    r%t#          j        d| j        | j        fz            d S d S )NzQLabel length of %d is greater than this dialect's maximum identifier length of %d)_get_server_version_infoserver_version_infoNotImplementedError_get_default_schema_namedefault_schema_nameget_isolation_level
connectiondefault_isolation_level_check_unicode_returnsreturns_unicode_stringsrB   _check_unicode_descriptionrD   r?   _check_max_identifier_lengthr@   rA   r	   r>   )rI   rr   max_ident_lengths      rK   
initializezDefaultDialect.initialize6  s   	,'+'D'D( (D$$ # 	, 	, 	,'+D$$$	,	,'+'D'D( (D$$ # 	, 	, 	,'+D$$$	,	0+/+C+C%, ,D(( # 	0 	0 	0+/D(((	0 (,'B'B:'N'N$ %1//
;; 2 EIHD%(A7 	>#@@LL >-=* 	!D$>>>#3$d&@AB  		 	>>s/    11A A$#A$(B BBc                     d S rO   r!   rR   s    rK   
on_connectzDefaultDialect.on_connectb  s    trM   c                     dS )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!   )rI   rr   s     rK   rw   z+DefaultDialect._check_max_identifier_lengthf  s	     trM   c                     t           j        r j        st           j        nt           j         j        r                                 ni  fdt          j        t          j	        d          t          j        d                    t          j        t          j	        d          t          j        d                    g}|r||z  }fd|D             }|                    ddg          rdS |dhk    S )	Nc                     t          j        | g                                                  }	 j                                        }                    ||           |                                }|                                 t          |d         t          j
                  S # t          j        $ r"}t          j        d|z             Y d }~dS d }~ww xY w)Ndialectr   z2Exception attempting to detect unicode returns: %rF)r   selectcompilerr   cursor_cursor_executefetchoneclose
isinstancer   	text_typer	   
DBAPIErrorr,   )	test	statementr   rowdecast_torr   
parametersrI   s	        rK   check_unicodez<DefaultDialect._check_unicode_returns.<locals>.check_unicode}  s    !4&))11$1?? I:#.5577**69jIIIoo'' "#a&$.999 >    	1356   uuuuus   AB- -C<CCz'test plain returns'<   z'test unicode returns'c                 &    h | ]} |          S r!   r!   ).0r   r   s     rK   	<setcomp>z8DefaultDialect._check_unicode_returns.<locals>.<setcomp>  s#    9994==&&999rM   TFconditional)r   py2ksupports_unicode_statementsbinary_typer   r/   execute_sequence_formatr   castliteral_columnsqltypesVARCHARUnicode
issuperset)rI   rr   additional_teststestsresultsr   r   r   s   ``   @@@rK   rt   z%DefaultDialect._check_unicode_returnsr  s3   9 	%T= 	%&GGnG? 	5577JJJ	: 	: 	: 	: 	: 	: 	: 	:, O)*@AA $$  O)*BCC $$ 
  	&%%E99995999tUm,, 	% =tf$$rM   c           	         t           j        r| j        st           j        }nt           j        }|j                                        }	 |                     |t          j	        t          j
        d                              d          g                              |                                t          |j        d         d         t           j                  |                                 S # |                                 w xY w)Nz'x'
some_labelr   r   )r   r   r   r   r   rr   r   executer   r   r   labelr   r   descriptionr   )rI   rr   r   r   s       rK   rv   z)DefaultDialect._check_unicode_description  s    
 9 	%T= 	%&GGnG&--//
	NN%#2599??MMN gdg++    f03A6GGLLNNNNFLLNNNNs   BC0 0Dc                 6    t          j        || 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   
adapt_typecolspecs)rI   typeobjs     rK   type_descriptorzDefaultDialect.type_descriptor  s     "7DM:::rM   c                 b    t           j                            |          } |j        ||||fi |S rO   )r   	Inspectorfrom_enginereflecttable)rI   rr   tableinclude_columnsexclude_columnsresolve_fksoptsinsps           rK   r   zDefaultDialect.reflecttable  sG     #//
;; t ?O[
 
DH
 
 	
rM   c                 (    d | j         ||fd|i|iS )zCompatibility method, adapts the result of get_primary_keys()
        for those dialects which don't implement get_pk_constraint().

        constrained_columnsr   )get_primary_keys)rI   conn
table_namer   kws        rK   get_pk_constraintz DefaultDialect.get_pk_constraint  s=     "#84#8j$ $)/$35$ $
 	
rM   c                 r    t          |          | j        k    rt          j        d|| j        fz            d S )Nz7Identifier '%s' exceeds maximum length of %d characters)lenr@   r	   IdentifierError)rI   idents     rK   validate_identifierz"DefaultDialect.validate_identifier  sF    u::222%I$456   32rM   c                 &     | j         j        |i |S rO   )r1   connect)rI   cargscparamss      rK   r   zDefaultDialect.connect  s    !tz!54G444rM   c                 f    |                                 }|                    |j                   g |gS rO   )translate_connect_argsupdatequery)rI   r_   r   s      rK   create_connect_argsz"DefaultDialect.create_connect_args  s1    ))++CIDzrM   c                      d|v r)|d         t          j        |d           fd            }d|v rCt          j        |d                   |_        t          j        |d          fd            }d S d S )Nisolation_levelengine_connectc                 <    |s                     |            d S d S rO   )_set_connection_isolation)rr   branchr   rI   s     rK   set_isolationzBDefaultDialect.set_engine_execution_options.<locals>.set_isolation  s4     P22:OOOOOP PrM   schema_translate_mapc                     | _         d S rO   )schema_for_object)rr   r   getters     rK   set_schema_translate_mapzMDefaultDialect.set_engine_execution_options.<locals>.set_schema_translate_map  s    /5
,,,rM   )r   listens_forr   _schema_getterr   )rI   enginer   r   r   r   r   s   `    @@rK   set_engine_execution_optionsz+DefaultDialect.set_engine_execution_options  s    $$"#45Ov'788P P P P P 98P "T))*40F+GHHF'-F$v'7886 6 6 6 986 6 6 *)rM   c                     d|v r|                      ||d                    d|v r#t          j        |d                   }||_        d S d S )Nr   r   )r   r   r   r   )rI   rr   r   r   s       rK    set_connection_execution_optionsz/DefaultDialect.set_connection_execution_options  s`    $$**:t<M7NOOO!T))*40F+GHHF+1J((( *)rM   c                     |                                 rt          j        d           |                     |j        |           |j        j        j                            | j                   d S )NzConnection is already established with a Transaction; setting isolation_level may implicitly rollback or commit the existing transaction, or have no effect until next transaction)	in_transactionr   r,   set_isolation_levelrr   _connection_recordfinalize_callbackappendreset_isolation_level)rI   rr   levels      rK   r   z(DefaultDialect._set_connection_isolation  s{    $$&& 	I#   	  !6>>>0BII&	
 	
 	
 	
 	
rM   c                     d S rO   r!   rI   dbapi_connections     rK   do_beginzDefaultDialect.do_begin      rM   c                 .    |                                  d S rO   )rollbackr   s     rK   do_rollbackzDefaultDialect.do_rollback  s    !!#####rM   c                 .    |                                  d S rO   )commitr   s     rK   	do_commitzDefaultDialect.do_commit!  s    !!!!!rM   c                 .    |                                  d S rO   )r   r   s     rK   do_closezDefaultDialect.do_close$  s         rM   c                 n    t          t          j        dg                              |                     S )Nr   r   )strr   r   r   rR   s    rK   _dialect_specific_select_onez+DefaultDialect._dialect_specific_select_one'  s.    :$aS))11$1??@@@rM   c                 2   d }	 |                                 }	 |                    | j                   |                                 n# |                                 w xY w	 dS # | j        j        $ r#}|                     |||          rY d }~dS  d }~ww xY wNTF)r   r   r   r   r1   Erroris_disconnect)rI   r   r   errs       rK   do_pingzDefaultDialect.do_ping+  s    	%,,..Ft@AAA 4 z 	 	 	!!#'7@@ uuuuu		s3   A$ A A$ AA$ $B3BBBc                 8    dt          j        dddz            z  S )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_%032xr   r      )randomrandintrR   s    rK   
create_xidzDefaultDialect.create_xid;  s     V^AqCx8888rM   c                 T    |                     t          j        |                     d S rO   )r   r   SavepointClauserI   rr   r-   s      rK   do_savepointzDefaultDialect.do_savepointD  s'    :5d;;<<<<<rM   c                 T    |                     t          j        |                     d S rO   )r   r   RollbackToSavepointClauser  s      rK   do_rollback_to_savepointz'DefaultDialect.do_rollback_to_savepointG  s'    :?EEFFFFFrM   c                 T    |                     t          j        |                     d S rO   )r   r   ReleaseSavepointClauser  s      rK   do_release_savepointz#DefaultDialect.do_release_savepointJ  s'    :<TBBCCCCCrM   c                 2    |                     ||           d S rO   )executemanyrI   r   r   r   contexts        rK   do_executemanyzDefaultDialect.do_executemanyM  s    9j11111rM   c                 2    |                     ||           d S rO   r   r  s        rK   
do_executezDefaultDialect.do_executeP  s    y*-----rM   c                 0    |                     |           d S rO   r  )rI   r   r   r  s       rK   do_execute_no_paramsz#DefaultDialect.do_execute_no_paramsS  s    y!!!!!rM   c                     dS )NFr!   )rI   err   r   s       rK   r   zDefaultDialect.is_disconnectV  s    urM   c                 <    |                      || j                   d S rO   )r   rs   )rI   
dbapi_conns     rK   r   z$DefaultDialect.reset_isolation_levelY  s#     	  T-IJJJJJrM   c                 V   |d S t           j        r/t          |t                    r|                    | j                  }|                                }|                                }||k    r|S ||k    r| j        	                    |          s|S ||k    rt          |d          S |S )NT)quote)r   r   r   r   decoder.   lowerupperr6   _requires_quotesr   rI   r-   
name_lower
name_uppers       rK   normalize_namezDefaultDialect.normalize_name_  s    <49 	2$$$ 2{{4=11ZZ\\
ZZ\\
## K4$55
& &  
 4 t40000 KrM   c                 ,   |d S |                                 }|                                }||k    r|S ||k    r| j                            |          s|}t          j        r1| j        s|                    | j                  }nt          |          }|S rO   )
r  r  r6   r  r   r   supports_unicode_bindsencoder.   unicoder  s       rK   denormalize_namezDefaultDialect.denormalize_name|  s    <4ZZ\\
ZZ\\
## K4$55
& &   D9 	%. %{{4=11t}}rM   )Fr"   NNNNTNr#   NNrO   )h__name__re   __qualname____doc__r   SQLCompilerstatement_compilerDDLCompilerddl_compilerGenericTypeCompilerr7   IdentifierPreparerr5   supports_altersupports_commentsinline_commentsdefault_sequence_basetupler   supports_viewssupports_sequencessequences_optional"preexecute_autoincrement_sequencespostfetch_lastrowidr4   r8   cte_follows_insertsupports_native_enumr9   #non_native_boolean_check_constraintsupports_simple_order_by_labeltuple_in_valuesr   immutabledictbool_or_strasintasboolengine_config_typessupports_native_decimalpy3kr   r$  ru   rB   r-   r@   r?   max_index_name_lengthrY   supports_sane_multi_rowcountr   r3   supports_default_valuessupports_empty_insertsupports_multivalues_insertsupports_is_distinct_fromsupports_server_side_cursorssupports_for_update_ofrm   construct_argumentsrequires_name_normalizereflection_optionsdbapi_exception_translation_mapdeprecated_paramsrL   memoized_propertyrS   propertyrW   rZ   classmethodr`   rj   ry   r{   rw   rt   rv   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!   rM   rK   r   r   ,   s       ++!-'L0M*HNO  $N).&"& #*.'%)"O,$, 0 0 9 9:TZ(%T%g../*$*7334TZ($*%TZ(-		
   $y 	.&*#!%"&#&+#!&"'-D !*.' !!#' H # "' $#(  #"R $&8d&8&:&:# T
   $( $""HO HO HO HOT 
+ + + - - X- + + X+ 9 9 [9   [* * *X  
 
 
5% 5% 5% 5%n  .	; 	; 	;
 
 
	
 	
 	
 	
  5 5 5  6 6 6"2 2 2
 
 
  $ $ $" " "! ! ! 
A A A   9 9 9= = =G G GD D D2 2 2 2. . . ." " " "  K K K  :    rM   r   c                       e Zd Zd ZdS )_RendersLiteralc                     d }|S )Nc                     d| z  S )Nz'%s'r!   )values    rK   processz2_RendersLiteral.literal_processor.<locals>.process  s    E>!rM   r!   )rI   r   r\  s      rK   literal_processorz!_RendersLiteral.literal_processor  s    	" 	" 	" rM   N)r(  re   r)  r]  r!   rM   rK   rX  rX    s#            rM   rX  c                       e Zd ZdS )_StrDateTimeNr(  re   r)  r!   rM   rK   r_  r_            DrM   r_  c                       e Zd ZdS )_StrDateNr`  r!   rM   rK   rc  rc    ra  rM   rc  c                       e Zd ZdS )_StrTimeNr`  r!   rM   rK   re  re    ra  rM   re  c                       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ej        eej        eej        eiZdS )StrCompileDialectTFN)r(  re   r)  r   StrSQLCompilerr,  r-  r.  StrSQLTypeCompilerr7   r0  r5   r7  r8  r9  r4   r9   r>  r   DateTimer_  Daterc  Timere  r   r!   rM   rK   rg  rg    sr        !0'L/M*H).&"%)" 	<xxHHHrM   rg  c                   P   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 ej                    Zed             Zed             Zd Zed             Zed             Zej        d             Zej        d	             Zej        d
             Zej        d             Zej        d             Zej        d             Z d Z!e"d             Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-e"d             Z.d Z/d Z0d Z1d Z2d Z3d  Z4d! Z5	 d*d"Z6d# Z7dZ8	 d+d%Z9d& Z:d' Z;d( Z<d) Z=dS ),DefaultExecutionContextFNc                 z   |                      |           }||_        ||_        |j        |_        |x|_        }d|_        |j        |_        |j        r8t          |j                  |_        |j        	                    |j                   |j
        s?t          j        |          |_        |                    |j                  d         |_        n t          j        |          x|_        |_        |                                |_        g |_        |j        r|                                g|_        ni g|_        |S )z8Initialize execution context for a DDLElement construct.Tr   )__new__root_connection_dbapi_connectionr   compiledisddlexecution_options_execution_optionsdictr   r   r   r   unicode_statementrG   r   create_cursorr   compiled_parametersr/   r   r   )r^   r   rr   r   compiled_ddlrI   rs  s          rK   	_init_ddlz!DefaultExecutionContext._init_ddl  s(    {{3)!1!)#//
!)!;( 	I%)$*@%A%AD""))**GHHH2 	O%)^H%=%=D"$--d.DEEaHDNN6:nX6N6NNDNT3((**#%  	#&>>@@ADOO!dDOrM   c                    |                      |           }||_        ||_        |j        |_        |_        j        sJ j                            |j                  |_        j	        j
        j        f|_        t          j                  |_        j        s*|j                            |j        j                  |_        n|j        |_        j        |_        j        |_        j        |_        j        |_        |s                                g|_        n8fdt7          |          D             |_        t9          |          dk    |_        |                                |_        |j        s|j        s|j        rKd|_         tC          j        j"                  |_#        tC          j$        oj        j"                   |_%        |j        j&        s|j        j'        r0|j        r|(                                 n|)                                 j*        j+        r&tY                    |-                              }nj.        r|j        j/        }g }j.        r|j        D ]{g }|D ]L}	|	v r+|0                     |	         |	                              1|0                    |	                    M|0                    1                    |                     |ncj         }
|j        D ]S|
rtY          fdD                       }ntY          fdD                       }|0                    |           T1                    |          |_2        |S )z6Initialize execution context for a Compiled construct.c                 D    g | ]\  }}                     ||           S ))_group_number)construct_params)r   grpmrs  s      rK   
<listcomp>z:DefaultExecutionContext._init_compiled.<locals>.<listcomp>  s@     ( ( (C ))!3)??( ( (rM   r   Tc              3      K   | ]B}                     |          d          |v r |         |                   n|         fV  CdS )r   NrG   )r   keycompiled_paramsr   r   s     rK   	<genexpr>z9DefaultExecutionContext._init_compiled.<locals>.<genexpr>P  s       ! !   $,,S11!4"j00 ,JsOOC,@AAA!0!5	! ! ! ! ! !rM   c              3   b   K   | ])}||v r |         |                   n|         fV  *d S rO   r!   )r   r  r  r   s     rK   r  z9DefaultExecutionContext._init_compiled.<locals>.<genexpr>Z  sl       ! !    "j00 ,JsOOC,@AAA!0!5	! ! ! ! ! !rM   )3rp  rq  rr  r   rs  can_executeru  unionrv  _result_columns_ordered_columns_textual_ordered_columnsresult_column_structr   r   rx  r   r%  r.   r   isinsertisupdateisdeleteisplaintextis_textr  rz  	enumerater   r  ry  r   is_crudbool
_returning_is_explicit_returning	returning_is_implicit_returninginsert_prefetchupdate_prefetch_process_executemany_defaults_process_executesingle_defaults_bind_processorscontains_expanding_parametersrw  _expand_in_parametersr/   positiontupr   r   r   )r^   r   rr   r   rs  r   rI   r  paramr  r%  r  r   s    `  `      @@rK   _init_compiledz&DefaultExecutionContext._init_compiled  s    {{3)!1!)  ####!)!;!A!A)"
 "

 $%-%
! "&!9!92 	4!3::% DNN "3DN ) ) )+ 	3(0(A(A(C(C'DD$$( ( ( ('
33( ( (D$
  #:2D((**= 	DM 	T] 	DL*.x/A/L*M*MD'*."H8+=+H'H+ +D' =( 	7DM,I 	7 722444444666.
1 	4j))J44XzJJKK  	4-3K
 
 "	)#'#; J J& ; ;Cj((_Z__S5I%J%JKKKK_S%9::::!!'"A"A%"H"HIIIIJ !<<F#'#; ) )   ! ! ! ! ! ! $3! ! !  EE ! ! ! ! ! ! $3! ! !  E !!%((((!99*EErM   c                 
   	
  j         rt          j        d           j        j        r j        j        rt          d          i  _         j        d         }|j        rg }nd}i 
i }|j        r j        j	        n j        j
        D ]ъ	 j        j
        	         }|j        r	
v r
|	         n|                    	          }|s9g x|	<    j                            |j        r|j        n|j        g          
	<   nt!          |d         t"          t$          f          re	fdt'          |d          D             x|	<    j        j        rdndd	                     fd
t'          |          D                       z   
	<   nE	fdt'          |d          D             x|	<   d	                     fdD                       
	<   |                                j        	fdD                        |j        r|                    d D                        d D              j        	<   |j        r|                    	           ӈ
fd}t5          j        d| j                   _        |S )zhandle special 'expanding' parameters, IN tuples that are rendered
        on a per-parameter basis for an otherwise fixed SQL statement string.

        z7'expanding' parameters can't be used with executemany()zQ'expanding' bind parameters not supported with 'numeric' paramstyle at this time.r   Nc                 Z    g | ]'\  }}t          |d           D ]\  }}d|d||f(S )r   _)r  )r   ituple_elementjr[  r-   s        rK   r  zADefaultExecutionContext._expand_in_parameters.<locals>.<listcomp>  sh     < < < 0=,5mQ,G,G< < !)5 ,044AA6>< < < <rM   r   zVALUES  , c              3      K   | ];\  d d                     fdt                    D                       z  V  <dS )z(%s)r  c              3   ~   K   | ]7\  }}j         j        d t                    z  |z            d         iz  V  8dS )r-   r   N)rs  bindtemplater   )r   r  r[  r  rI   	to_updater  s      rK   r  zJDefaultExecutionContext._expand_in_parameters.<locals>.<genexpr>.<genexpr>  ss       ( ( %-Au !% :$*I()C,>,>(>(B-&&'-)#"!"( ( ( ( ( (rM   N)rd   r  )r   r  r  rI   r  s    @@rK   r  z@DefaultExecutionContext._expand_in_parameters.<locals>.<genexpr>  s       & & !1= #"ii ( ( ( ( ( ( ( 1:-0H0H( ( (  	& & & & & &rM   c                 (    g | ]\  }}d ||fS )r  r!   )r   r  r[  r-   s      rK   r  zADefaultExecutionContext._expand_in_parameters.<locals>.<listcomp>  s=     < < < (5 )-aa0%8< < <rM   c              3   @   K   | ]\  }}j         j        d |iz  V  dS )r-   N)rs  r  )r   r  r[  rI   s      rK   r  z@DefaultExecutionContext._expand_in_parameters.<locals>.<genexpr>  sQ       B B *U !M6&#FB B B B B BrM   c              3   :   K   | ]\  }}v 	|         fV  d S rO   r!   )r   r  r[  r-   r   s      rK   r  z@DefaultExecutionContext._expand_in_parameters.<locals>.<genexpr>  sH       " ""Uz)) *T*+))))" "rM   c              3       K   | ]	\  }}|V  
d S rO   r!   )r   r-   r[  s      rK   r  z@DefaultExecutionContext._expand_in_parameters.<locals>.<genexpr>  s&      &I&Iet&I&I&I&I&I&IrM   c                     g | ]\  }}|S r!   r!   )r   
expand_keyr[  s      rK   r  zADefaultExecutionContext._expand_in_parameters.<locals>.<listcomp>  s)     3 3 3#4:uJ3 3 3rM   c                 :    |                      d                   S )Nr   )group)r  replacement_expressionss    rK   process_expandingzHDefaultExecutionContext._expand_in_parameters.<locals>.process_expanding  s    *1771::66rM   z\[EXPANDING_(\S+)\])r  r	   InvalidRequestErrorrs  r/   _numeric_bindsrn   _expanded_parametersrz  r  binds	expandingpopvisit_empty_set_expr_expanding_in_typestyper   r5  listr  r   r?  rd   r   extendr   resubr   )rI   rs  r   r  r  to_update_sets	parametervaluesr  r-   r  r  s   ` `      @@@rK   r  z-DefaultExecutionContext._expand_in_parametersj  s   
  	)L   =# 	(D 	%5  
 %'!215 	KKK"$ "%DM%%$H	) H	)D
 +D1I" B)222 .t 4II -0066F! ';==	N4$8 !M>>(<2I99"+.!1  0   $F1It}== < < < <4=fa4H4H< < < 	N4$8 *.)EMII2 II & & & & & 5>f4E4E& & &  9/55 < < < <,5fa,@,@< < < 	N4$8 9=		 B B B B.7B B B 9 9/5
  &&y111!
! " " " " "&/" " "   
 & J&&&I&Iy&I&I&IIII3 38A3 3 3)$// $ )""4(((	7 	7 	7 	7 	7 "$5t~
 
 rM   c                    |                      |           }||_        ||_        |j        |_        d|_        |j        |_        |s0|j        j        r                                g|_	        ni g|_	        nwt          |d         j                  r||_	        nTt          |d         t                    r&j        r||_	        n*fd|D             pi g|_	        nfd|D             |_	        t          |          dk    |_        j        sBt          |t          j                  r(||_                            |          d         |_        n|x|_        |_        |                                |_        |S )z8Initialize execution context for a string SQL statement.Tr   c                 0    g | ]fd D             S )c                 T    i | ]$}                     |          d          |         %S )r   r  )r   kdr   s     rK   
<dictcomp>zFDefaultExecutionContext._init_statement.<locals>.<listcomp>.<dictcomp>  s2    ===aW%%a((+QqT===rM   r!   )r   r  r   s    @rK   r  z;DefaultExecutionContext._init_statement.<locals>.<listcomp>  sA     # # # >====1===# # #rM   c                 :    g | ]}                     |          S r!   )r   )r   pr   s     rK   r  z;DefaultExecutionContext._init_statement.<locals>.<listcomp>  s4       78//22  rM   r   )rp  rq  rr  r   r  rv  ru  r/   r   r   r   rw  r   r   r  r   r   rx  rG   r   ry  r   )r^   r   rr   r   r   r   rI   s    `     rK   _init_statementz'DefaultExecutionContext._init_statement  s    {{3)!1!) ",!> 	|& '#*#B#B#D#D"E#%$
1w'FGG 	(DOO
1t,, 	2 ",# # # #'# # # # T 
   <F  DO z??Q.2 	@zt~8
 8
 	@ &/D"$--i88;DNN6??DNT3((**rM   c                     |                      |           }||_        ||_        |j        |_        |j        |_        |                                |_        |S )z;Initialize execution context for a ColumnDefault construct.)rp  rq  rr  r   rv  ru  ry  r   )r^   r   rr   r   rI   s        rK   _init_defaultz%DefaultExecutionContext._init_default  sR     {{3)!1!)!+!>((**rM   c                     | j         j        S rO   )rq  r   rR   s    rK   r   zDefaultExecutionContext.engine  s    #**rM   c                     | j         j        S rO   )rs  	postfetchrR   s    rK   postfetch_colsz&DefaultExecutionContext.postfetch_cols  s    }&&rM   c                 R    | j         r| j        j        S | j        r| j        j        S dS )Nr!   )r  rs  r  r  r  rR   s    rK   prefetch_colsz%DefaultExecutionContext.prefetch_cols  s1    = 	=00] 	=002rM   c                     | j         j         d S rO   )rs  r  rR   s    rK   returning_colsz&DefaultExecutionContext.returning_cols%  s    rM   c                 8    | j                             dd          S )Nno_parametersF)ru  getrR   s    rK   r  z%DefaultExecutionContext.no_parameters)  s    %))/5AAArM   c                     | j                             d| j         r| j        rt          j        pd          }|t          j        u r|                     | j                  S |S )N
autocommitF)ru  r  rs  r   r   PARSE_AUTOCOMMITshould_autocommit_textrx  )rI   r  s     rK   should_autocommitz)DefaultExecutionContext.should_autocommit-  sq    +// ,,+ 
 

 444..t/EFFFrM   c                    | j         }t          |t          j                  r,| j        j        s | j                            |          d         }| j        j        r| j                                        }ni }|	                    | j
        |||            | j
                                        d         }|>|                    | 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  Nr   )rq  r   r   r   r   r   rG   r/   r   r   r   r   _cached_result_processorr   )rI   stmttype_r   default_paramsrprocs          rK   _execute_scalarz'DefaultExecutionContext._execute_scalar<  s     #tT^,,	2L<	2 <((..q1D<" 	 !\AACCNNNT[$MMMK  ""1%11dk5a8; D  tAwwrM   c                 4    | j                                         S rO   )rq  _branchrR   s    rK   rr   z"DefaultExecutionContext.connection]  s    #++---rM   c                 6    t                               |          S rO   )AUTOCOMMIT_REGEXPmatch)rI   r   s     rK   r  z.DefaultExecutionContext.should_autocommit_texta  s     &&y111rM   c                    | j         j        sdS | j         j        r| j                            dd          o|| j        r$t          | j        j        t          j	                  pQ| j         p#t          | j        j        t          j
                  o%| j        ot                              | j                  }n| j                            dd          }|S )NFstream_resultsT)r   rM  server_side_cursorsru  r  rs  r   r   r   
Selectable
TextClauseSERVER_SIDE_CURSOR_REr  )rI   use_server_sides     rK   _use_server_side_cursorz/DefaultExecutionContext._use_server_side_cursord  s    |8 	5<+ 	"488 $   M "/1F  !%- ) $ 79N   H !NH 277GG! O* #488 % O rM   c                     |                                  rd| _        |                                 S d| _        | j                                        S r   )r  _is_server_sidecreate_server_side_cursorrr  r   rR   s    rK   ry  z%DefaultExecutionContext.create_cursor  sM    '')) 	3#'D 11333#(D )00222rM   c                     t                      rO   )rn   rR   s    rK   r  z1DefaultExecutionContext.create_server_side_cursor  s    !###rM   c                     d S rO   r!   rR   s    rK   pre_execz DefaultExecutionContext.pre_exec  r   rM   c                     d S rO   r!   rR   s    rK   	post_execz!DefaultExecutionContext.post_exec  r   rM   c                 8    |                     | 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.

        )r  r   )rI   r  colnamecoltypes       rK   get_result_processorz,DefaultExecutionContext.get_result_processor  s     --dlGDDDrM   c                     | 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, directly after
        post_exec() and before the transaction is committed
        or ResultProxy is generated.   If the post_exec()
        method assigns a value to `self._lastrowid`, the
        value is used in place of calling get_lastrowid().

        Note that this method is *not* equivalent to the
        ``lastrowid`` method on ``ResultProxy``, which is a
        direct proxy to the DBAPI ``lastrowid`` accessor
        in all cases.

        )r   	lastrowidrR   s    rK   get_lastrowidz%DefaultExecutionContext.get_lastrowid  s    4 {$$rM   c                     d S rO   r!   )rI   r  s     rK   handle_dbapi_exceptionz.DefaultExecutionContext.handle_dbapi_exception  r   rM   c                 `    | j         rt          j        |           S t          j        |           S rO   )r  r   BufferedRowResultProxyResultProxyrR   s    rK   get_result_proxyz(DefaultExecutionContext.get_result_proxy  s/     	,0666%d+++rM   c                     | j         j        S rO   )r   rowcountrR   s    rK   r  z DefaultExecutionContext.rowcount  s    {##rM   c                     | j         j        S rO   )r   rY   rR   s    rK   rY   z.DefaultExecutionContext.supports_sane_rowcount  s    |22rM   c                     | j         j        S rO   )r   rH  rR   s    rK   rH  z4DefaultExecutionContext.supports_sane_multi_rowcount  s    |88rM   c                 t   | j         rV| j        sO| j        s-| j        j        s!| j        j        r|                                  n| j        s|                                  | 	                                }| j         rg| j        rB |j
                    }|| _        |                     |            |j                     d |_        nv| j        s |j                     d |_        nX| j        r4| j        r- |j
                    }|| _         |j                     d |_        n|j        |j          |j                     |S rO   )r  r  r  rs  inliner   r:  _setup_ins_pk_from_lastrowid_setup_ins_pk_from_emptyr  r   returned_defaults%_setup_ins_pk_from_implicit_returning_soft_close	_metadatar  r  r  )rI   r   r   s      rK   _setup_crud_result_proxyz0DefaultExecutionContext._setup_crud_result_proxy  sr   = 
	0!1 
	0/	0,	0 L4	0 1133330 0--///&&((= 	!* (%fo''),&::3???""$$$#'  0 (""$$$#' ] 	!t: 	!!&/##C%(D"F   #F% OOF   rM   c                 r   | j         j        d         | j         j        j        }| j        d         |                                 S|j        -j                            | j	        d           }| |          fd|j
        D             | _        d S fd|j
        D             | _        d S )Nr   r   c                 Z    g | ]'}|u rn                      |          d           (S rO   r  )r   cautoinc_colr  
key_getterr	  s     rK   r  zHDefaultExecutionContext._setup_ins_pk_from_lastrowid.<locals>.<listcomp>  sU     ) ) )  ## 	$((A==) ) )rM   c                 N    g | ]!}                      |          d           "S rO   r   r   r!  r  r#  s     rK   r  zHDefaultExecutionContext._setup_ins_pk_from_lastrowid.<locals>.<listcomp>  sA     ) ) )  ##JJqMM488) ) )rM   )rs  _key_getters_for_crud_columnr   r   rz  r
  _autoincrement_columnr  r  r   primary_keyinserted_primary_key)rI   r   r  r"  r  r#  r	  s      @@@@rK   r  z4DefaultExecutionContext._setup_ins_pk_from_lastrowid  s   ]?B
'-215&&((	 5K&"'@@L$  # $YI) ) ) ) ) ) ) *	) ) )D%%%) ) ) ) )*) ) )D%%%rM   c                     | j         j        d         | j         j        j        }| j        d         fd|j        D             | _        d S )Nr   r   c                 N    g | ]!}                      |          d           "S rO   r   r%  s     rK   r  zDDefaultExecutionContext._setup_ins_pk_from_empty.<locals>.<listcomp>  s>     %
 %
 %
9:O

1t44%
 %
 %
rM   )rs  r&  r   r   rz  r(  r)  )rI   r   r  r#  s     @@rK   r  z0DefaultExecutionContext._setup_ins_pk_from_empty  sf    ]?B
'-215%
 %
 %
 %
 %
>C>O%
 %
 %
!!!rM   c                     	d | _         d S | j        j        d         | j        j        j        }| j        d         fdfd|j        D             D             | _         d S )Nr   r   c                 .    g | ]\  }}||         n|S rO   r!   )r   colr[  r   s      rK   r  zQDefaultExecutionContext._setup_ins_pk_from_implicit_returning.<locals>.<listcomp>"  s9     %
 %
 %
U CHH5%
 %
 %
rM   c                 R    g | ]#}|                      |          d           f$S rO   r   )r   r.  r  r#  s     rK   r  zQDefaultExecutionContext._setup_ins_pk_from_implicit_returning.<locals>.<listcomp>$  sF        o))**S//4@@A  rM   )r)  rs  r&  r   r   rz  r(  )rI   r   r   r  r#  s    ` @@rK   r  z=DefaultExecutionContext._setup_ins_pk_from_implicit_returning  s    ;(,D%F]?B
'-215%
 %
 %
 %
     ,  %
 %
 %
!!!rM   c                 P    | j         s| j        ot          | j        j                  S rO   )r  r  r  rs  r  rR   s    rK   lastrow_has_defaultsz,DefaultExecutionContext.lastrow_has_defaults*  s,    . 
DM#5
 5
 	
rM   c                 z   t          | j        d          sdS i }| j        j        D ]p}|j                            | j                  }t          |          }|                    | j        j                  |r|vr||vr|r|v s||v r||<   kd||<   q| j        j        r2| j        j	        
                    || j        | j        | j        |            | j        j        rg }| j        j        D ]|}	| j        j        |	         }|                    |d          P|	| j        v r2|                    gt)          | j        |	                   z             g|                               }	  | j        j        |  dS # t.          $ r)}
| j                            |
ddd|            Y d}
~
dS d}
~
ww xY wi }| j        j                                        D ]\  }}	|                    |d          |r|                    |	|	          }	| j        j        s | j                            |	          d         }	|	| j        v r-|                    fd| j        |	         D                        ||	<   	  | j        j        di | dS # t.          $ r)}
| j                            |
ddd|            Y d}
~
dS d}
~
ww xY w)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.

        
bind_namesNr   c              3       K   | ]}|fV  	d S rO   r!   )r   r  dbtypes     rK   r  z:DefaultExecutionContext.set_input_sizes.<locals>.<genexpr>z  s<       2 2 * (02 2 2 2 2 2rM   r!   )hasattrrs  r3  r  _unwrapped_dialect_implr   get_dbapi_typer1   _has_eventsdispatchdo_setinputsizesr   r   r   r/   r  r  r  r  r  r   r   setinputsizesBaseExceptionrq  _handle_dbapi_exceptionitemsr$  rG   r   )rI   	translateinclude_typesexclude_types
inputsizes	bindparamdialect_impldialect_impl_clspositional_inputsizesr  r  keyword_inputsizesr5  s               @rK   set_input_sizesz'DefaultExecutionContext.set_input_sizes/  s    t}l33 	F
1 	- 	-I$>AA$,OOL#L11!001CDDF "% # ]22(== & > ..'=88 )/
9%%(,
9%%<# 	L!22DK$   <" *	$&!}0 	= 	= M/4	#	488%d777-44#Hs4+DS+I'J'JJ    .44V<<<))+@AAAA    $<<tT4        
 "$"&-":"@"@"B"B 9 9	3#	488%  6 (mmC55<> <"l33C88;d777*11 2 2 2 2.2.G.L2 2 2    
 39*3/))??,>?????    $<<tT4        s0   .E? ?
F2	F--F23J 
J:J55J:c                    |j         r|                     ||          S |j        r|| _        |                    |           S |j        r| j        }|j        st          j	        |j        |          }n|j        }t          j
        |g                              |          }|                    |di                                           S |j        S )N)bindr!   )is_sequencefire_sequenceis_callablecurrent_columnargis_clause_elementrr   _arg_is_typedr   type_coercer   r   _execute_compiledscalar)rI   columnr   r  r   default_argr!  s          rK   _exec_defaultz%DefaultExecutionContext._exec_default  s     	%%gu555  	"(D;;t$$$& 	 ?D( *(4W[%HH%k!;-0088d8CCA))!R44;;===;rM   Tc                    	 | j         | j        }n"# t          $ r t          j        d          w xY w|r| j        r| j        j        j        r|j	        r$|j
        dz   |j        j        |j                 i}n|j        |j                 i}d| j        j        j        d                                         }|                    fd|D                        |S 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   6   K   | ]}|d |fz           fV  dS )z%s_m%dNr!   )r   r  indexr   s     rK   r  zADefaultExecutionContext.get_current_parameters.<locals>.<genexpr>  sG        ?BjS%L!89:     rM   )current_parametersrO  AttributeErrorr	   r  r  rs  r   _has_multi_parameters_is_multiparam_columnr[  originalr  r   keysr   )rI   isolate_multiinsert_groupsrV  r  ra  r[  r   s        @@rK   get_current_parametersz.DefaultExecutionContext.get_current_parameters  s-   B	0J(FF 	 	 	)C  	 '		 '=	
 + q(_(*VZ*@AZFJ!78=*5a8==??DHH     FJ      Hs    2c                 V    |j         d S |                     ||j         |j                  S rO   )r   rX  r  rI   rV  s     rK   get_insert_defaultz*DefaultExecutionContext.get_insert_default  s+    >!4%%ffnfkJJJrM   c                 V    |j         d S |                     ||j         |j                  S rO   )onupdaterX  r  re  s     rK   get_update_defaultz*DefaultExecutionContext.get_update_default  s+    ?"4%%ffov{KKKrM   c                    | j         j        d         }i }| j         j        }| j         j        }|D ]$}|j        r|j        j        r|j        j        ||<   %|D ]$}|j        r|j        j        r|j        j        ||<   %| j        D ]w}|| _	        |D ]4}||v r	||         }n| 
                    |          }||| ||          <   5|D ]4}||v r	||         }n|                     |          }||| ||          <   5x| `	d S )Nr   )rs  r&  r  r  r   	is_scalarrP  rh  rz  r\  rf  ri  )rI   r#  scalar_defaultsr  r  r!  r  vals           rK   r  z5DefaultExecutionContext._process_executemany_defaults  sc   ]?B
-7-7
 ! 	3 	3Ay 3QY0 3%&Y]"  	4 	4Az 4aj2 4%&Z^"- 	/ 	/E&+D#$ / /'')!,CC11!44C?+.E**Q--($ / /'')!,CC11!44C?+.E**Q--(/ ###rM   c                 ~   | j         j        d         }| j        d         x| _        }| j         j        D ]S}|j        r%|j        j        s|j        j        r|j        j        }n| 	                    |          }||| ||          <   T| j         j
        D ]'}|                     |          }||| ||          <   (| `d S )Nr   r   )rs  r&  rz  r\  r  r   rL  rk  rP  rf  r  ri  )rI   r#  rz  r!  rm  s        rK   r  z7DefaultExecutionContext._process_executesingle_defaults   s    ]?B
 $Q'	( . 	9 	9Ay 1!6 119;N 1im--a0058#JJqMM2. 	9 	9A))!,,C58#JJqMM2###rM   )NNN)T)>r(  re   r)  r  r  r  r  r  rt  r  rs  r   r  r  r  r  _translate_colnamer   r@  r  rV  r|  r  r  r  r  rT  r   r  r  r  r  r  r  rU  rr   r  r  ry  r  r  r  r  r
  r  r  r  rY   rH  r  r  r  r  r1  rI  rX  r\  rc  rf  ri  r  r  r!   rM   rK   rn  rn    s       HHHGGEKHI"" -4-//  [@ s s [sjl l l\ - - [-^ 	 	 [	 
+ + + 
' ' ' 
   
      
B B B 
    B . . X.2 2 2  @3 3 3$ $ $    E E E% % %8  , , , $ $ X$3 3 39 9 9% % %N  :
 
 

 
 
 
 
 
 AEV V V Vp  & 0: : : :xK K KL L L#$ #$ #$J$ $ $ $ $rM   rn  ))r*  rE   r   r  rP   r  r   r   r   r   r	   r
   r   r   r   r   sqlr   r   r   sql.elementsr   r   IUNICODEr  r  Dialectr   objectrX  rj  r_  rk  rc  rl  re  rg  ExecutionContextrn  execution_ctx_clsr!   rM   rK   <module>rx     s      				                                                                                & & & & & & BJ4bdRZ6G  
 #
<
1BCC d	 d	 d	 d	 d	Z' d	 d	 d	N    f   	 	 	 	 	?H$5 	 	 		 	 	 	 	 	 	 		 	 	 	 	 	 	 	       .v$ v$ v$ v$ v$j9 v$ v$ v$r $;      rM   